是否有一种简洁的方法可以在C#中遍历true / false?
我在单元测试中有大约20行代码,我不想重复以切换一个布尔值的真/假。
我可以将其分解为一个函数并调用两次,但是。此代码感觉更像是我遍历可能的值,而不是使用不同的参数执行不同的操作。即使我有一个函数,我也更喜欢在可能的值上循环的语法,而不是仅仅两次调用它。
我可以像这样写一个for
循环...
bool toggle;
for (int i = 0; i < 2; i++)
{
toggle = i == 1;
}
但这似乎并不干净。
我喜欢this syntax:
for (bool b : { false, true }) { /* ... */ }
但是看起来并不能在C#中编译。
编辑:
遵循Jeroen关于本地功能的建议和Dmitry的回答,这是我走的路:
[TestMethod]
public void GetAndSetValue()
{
foreach (bool toggle in new [] { false, true })
{
GetAndSetValue(toggle);
}
void GetAndSetValue(bool toggle)
{
// details not important
}
}
合理的编码人员可以辩论循环是否比两个函数调用更容易读取:
GetAndSetValue(false);
GetAndSetValue(true);
我更喜欢循环,所以我会一直循环下去,直到有人抱怨为止。干杯!
答案 0 :(得分:9)
正确的语法应为foreach
,而不是for
:
foreach (bool b in new [] { false, true }) {
/* ... */
}
答案 1 :(得分:2)
虽然我认为简单地编写参数化的函数绝对是正确的方法,但是与C#中可以获得的C ++ 11语法最接近的是:
foreach (bool value in new [] { false, true })
{
// ...
}
答案 2 :(得分:1)
我可能会用本地函数来做到这一点:
[TestMethod]
公共无效GetAndSetValue()
{
GetAndSetValue(false);
无效GetAndSetValue(布尔切换)
{
//细节不重要
如果(!toggle)
GetAndSetValue(true);
}
}
或采用私立方式的“老”学校。
[TestMethod]
公共无效GetAndSetValue()
{
GetAndSetValue(false);
}
私人无效GetAndSetValue(布尔切换)
{
//细节不重要
如果(!toggle)
GetAndSetValue(true);
}