C#遍历布尔值

时间:2018-07-04 14:28:02

标签: c# for-loop

是否有一种简洁的方法可以在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);

我更喜欢循环,所以我会一直循环下去,直到有人抱怨为止。干杯!

3 个答案:

答案 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);
}