我正在尝试将两个循环合并为一个。这个循环应该从头到尾遍历数组,否则。但是我的增量不正确。有人可以帮忙吗? T 提前取决于你。
for (int i = ((asc == true) ? 0 : calendar.Length - 1);
((asc == true) ? i < calendar.Length : i > 0);
(asc==true) ? i++ : i--)
答案 0 :(得分:6)
就个人而言,我发现非常难以阅读,以及无效(它不会编译) - 因为你试图使用条件运算符作为语句表达式,当它不是。就个人而言,我写的是:
for (int i = 0; i < calendar.Length; i++)
{
int index = asc ? i : calendar.Length - 1 - i;
// Now use index...
}
使三个不同的方面所有条件感觉都是一种讨厌的方式。
答案 1 :(得分:4)
Jon提出了一个很好的选择,但是如果原则:
for (int i = (asc ? 0 : calendar.Length - 1);
asc ? i < calendar.Length : i >= 0;
i += asc?1:-1)
{
//body
}
答案 2 :(得分:4)
查看&#34;对于&#34;:http://msdn.microsoft.com/en-us/library/ch45axte.aspx
的C#参考具体做法是:
迭代器部分定义了循环体的每次迭代后发生的事情。迭代器部分包含以下几个或多个语句表达式,以逗号分隔:
表达式:&#34;(asc == true)? i ++:我 - &#34;这些都不是。
因此,您需要分配:i + =(asc?1:-1)
for (int i = ((asc) ? 0 : calendar.Length - 1);
((asc) ? i < calendar.Length : i >= 0);
i += (asc) ? 1 : -1)
顺便提一下,正如评论中指出的那样,你可能希望在条件中查看索引0,所以你的条件语句在&#34;降序&#34; case应该是i> = 0(反映在代码中)。
答案 3 :(得分:1)
for循环是......奇怪的。这也很难读。根据&#34;更好的方法来做到这一点&#34;,我建议只使用Reverse
:
IEnumerable<Day> collection = asc ? calendar : calendar.Reverse();
for (int i = 0; i < calendar.Length; i++)
{
collection.ElemantAt(i);// This is the current element
}
//Or better, you are getting everything anyways:
foreach (Day day in collection)
{
}