C # цикл по значениям bool - PullRequest
0 голосов
/ 04 июля 2018

Есть ли краткий способ зацикливания на true / false в C #?

У меня ~ 20 строк кода в модульном тесте, я бы предпочел не дублировать, чтобы переключить одно логическое значение true / false.

Я мог бы разбить его на функцию и вызвать дважды, но ме. Этот код чувствует больше похоже на то, что я перебираю возможные значения, чем выполняю отдельное действие с разными параметрами. Даже если бы у меня была функция, я бы предпочел синтаксис зацикливания на возможных значениях, а не просто вызвать его дважды.

Я мог бы написать цикл for примерно так ...

bool toggle;
for (int i = 0; i < 2; i++)
{
    toggle = i == 1;
}

Но это не кажется очень чистым.

Мне нравится этот синтаксис :

for (bool b : { false, true }) { /* ... */ }

Но не похоже, что это скомпилируется в C #.

Edit:

Следуя предложению Йероена о локальных функциях и ответу Дмитрия, я пошел по этому маршруту:

[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 голосов
/ 04 июля 2018

Хотя я думаю, что написание параметризованной функции, безусловно, является правильным подходом, наиболее близким к синтаксису C ++ 11, который вы можете получить в C #, будет:

foreach (bool value in new [] { false, true })
{
    // ...
}
0 голосов
/ 04 июля 2018

Я бы, вероятно, просто сделал это так, либо с локальной функцией:

[TestMethod]
public void GetAndSetValue()
{
    GetAndSetValue(false);

    void GetAndSetValue(bool toggle)
    {
        // details not important

        if (!toggle)
            GetAndSetValue(true);
    }
}

Или "старая" школа с частным методом.

[TestMethod]
public void GetAndSetValue()
{
    GetAndSetValue(false);
}

private void GetAndSetValue(bool toggle)
{
    // details not important

    if (!toggle)
        GetAndSetValue(true);
}
0 голосов
/ 04 июля 2018

Правильный синтаксис будет foreach, а не for:

foreach (bool b in new [] { false, true }) {
   /* ... */
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...