1

如何在 foreach 循环中增加一个整数(如在 C++ 中)

这是我的代码,但它不会selectIndex在每次循环迭代期间增加整数。

var list = new List<string>();
int selectIndex = 0;

foreach(TType t in Gls.TTypes)
{
    selectIndex = Gls.TType.Name == t.Name ? selectIndex++ : 0;
    list.Add(t.Name);
}

让它工作如下:

var list = new List<string>();
int selectIndex = 0;
int counter = 0;
foreach(TaxType t in Globals.TaxTypes)
{
    selectIndex = Globals.TaxType.Name == t.Name ? counter : selectIndex;
    counter++;

    list.Add(t.Name);
}

目的是在 UIPickerView 中选择匹配项。

非常感谢所有的贡献!

4

7 回答 7

3

恕我直言,您在这里使用的模式很可怕。前置和后缀增量修改了它们被调用的值,因此复制结果是没有意义的(顺便说一下,它不起作用,因为您在后缀增量发生之前复制了值)。

因此,您可以使用@Vilx- 和@KarthikT 之类的解决方案 - 但在我看来,与其试图将所有内容都塞在一条线上,我更愿意看到:

if(Gls.TType.Name == t.Name) 
  selectIndex++;
else selectIndex = 0;

不要误会我的意思——我经常使用条件运算符;但在这种情况下我不会。

于 2013-01-17T08:29:58.290 回答
3

你是说

selectIndex += (Gls.TType.Name == t.Name ? 1 : 0);

?

如果您想查找名称等于 Gls.TType.Name 的对象的索引,那么以下代码可以帮助您。

var list = new List<string>();
foreach(TaxType t in Globals.TaxTypes)
{
    list.Add(t.Name);
}
int selectIndex = list.FindIndex(t => t == Globals.TaxTypes.Name);
于 2013-01-17T08:30:26.583 回答
3

我想你正在寻找正确的语法......我想你只是用

foreach(TType t in Gls.TTypes)
{
     selectIndex += (Gls.TType.Name == t.Name) ? 1 : 0;
     list.Add(t.Name);
}

或者

foreach(TType t in Gls.TTypes)
{
     selectIndex = (Gls.TType.Name == t.Name) ? selectIndex+1 : selectIndex;
     list.Add(t.Name);
}
于 2013-01-17T08:32:19.190 回答
3

如果我需要某种变量来增加,我喜欢在某些情况下使用范围。变量只存在于作用域中,因此它与for循环中的相同。毕竟垃圾收集器会破坏它。(可能会更好地使用 using 但我不是这个语言的专家。)

{
    int index = 6;
    foreach (var item in obj)
    {
        Console.WriteLine(item.text+index);
        index++;
    }
}
于 2017-05-31T14:16:42.527 回答
2

当你这样做时selectIndex = selectIndex++,我希望你会增加,然后立即将其重置为旧值..(因为后增量运算符在增量之前返回值)

我会建议一个简单selectIndex = selectIndex + 1的而不是功能性但不必要的++selectIndex

修改后的声明将是 -

selectIndex = Gls.TType.Name == t.Name ? selectIndex+1 : 0;
于 2013-01-17T08:24:48.383 回答
2

像这样写:

selectIndex = Gls.TType.Name == t.Name ? selectIndex+1 : 0;
于 2013-01-17T08:25:21.410 回答
2

试试这个selectIndex = Gls.TType.Name == t.Name ? ++selectIndex : 0;

请参阅此处:MSDN了解++运营商的工作方式

于 2013-01-17T08:25:55.997 回答