如何在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中选择匹配的项目。
非常感谢所有的贡献!
答案 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++;
}
}