如何在foreach和语句中增加整数?

时间:2013-01-17 08:23:45

标签: c# foreach increment post-increment

如何在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中选择匹配的项目。

非常感谢所有的贡献!

7 个答案:

答案 0 :(得分:2)

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

所以你可以使用像@ Vilx-和@ KarthikT这样的解决方案 - 但在我看来,我宁愿看到它而不是试图把它全部塞进一条线上:

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

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

答案 1 :(得分:2)

你的意思是

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);

答案 2 :(得分:2)

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

制造了一个错误
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);
}

答案 3 :(得分:1)

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

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

修改后的陈述将是 -

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

答案 4 :(得分:1)

像这样写:

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

答案 5 :(得分:1)

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

请参阅此处:MSDN了解++运算符的工作原理

答案 6 :(得分:1)

如果我需要某种变量来增加,我喜欢在情境中使用范围。 变量只存在于范围内,因此它与循环中的相同。垃圾收集器毕竟会摧毁它。(使用这个问题可能会更好,但我不是这个郎的大师。)

{
    int index = 6;
    foreach (var item in obj)
    {
        Console.WriteLine(item.text+index);
        index++;
    }
}