Фрагмент кода. Если перед оператором - PullRequest
0 голосов
/ 02 марта 2012

У меня есть такой код:

if (pref_const == Constants.PREF_PricingTypesFormWidth)
{
    a = 2;
    b = 3;   
    DoneFlag = true;
}
if (pref_const == Constants.PREF_PricingTypesFormTop)
{
    a = 4;
    b = 2; 
    DoneFlag = true;
}
......
if(!DoneFlag)//replacing of default-section in switch-statement
{
    //DoSthng
}

и многие другие операторы if.Не спрашивайте меня, почему не использовать switch-Statement.Итак, есть ли способ уменьшить переменную DoneFlag вообще ??

Ответы [ 3 ]

2 голосов
/ 02 марта 2012

Вы можете немного оптимизировать свое решение, чтобы значение флага «Готово» устанавливалось только в одну строку, а все остальные оставались бы как есть.Это нормально для вас?

LINQ Любой () :

using System.Linq;

// Assuming constants are strings
IList<string> constants = new List<string> 
           {
              Constants.PREF_PricingTypesFormWidth,
              Constants.PREF_PricingTypesFormTop,
           };

bool DoneFlag = constants.Any(p => p == perf_const);

Enumerable.Any () :

Определяет, удовлетворяет ли какой-либо элемент последовательности условию

1 голос
/ 02 марта 2012

Используйте полиморфизм: пусть каждый конкретный класс устанавливает переменные, чтобы ваш потребительский код не знал или не заботился, какой класс это делает.

Примечание. Этот ответ намеренно короток из-за вашей скорости принятия.

1 голос
/ 02 марта 2012

Предполагая, что под «уменьшить» вы подразумеваете «исключить», логически эквивалентная цепочка вложенных if-then-else операторов, которые не используют DoneFlag, выглядит следующим образом:

if (pref_const == Constants.PREF_PricingTypesFormWidth)
{
    a = 2;
    b = 3;   
}
else // <<===
if (pref_const == Constants.PREF_PricingTypesFormTop)
{
    a = 4;
    b = 2; 
}
else //replacing of default-section in switch-statement
{
    //DoSthng
}
...