В .NET тип Boolean
содержит значения True
(1) или False
(0).Вы можете использовать это и написать свой код без каких-либо условий:
int x = (int)f1();
x |= ((int)f2()) << 1;
x |= ((int)f3()) << 2;
x |= ((int)f4()) << 3;
x |= ((int)f5()) << 4;
Вы можете потенциально структурировать приведенный выше код так, чтобы он возвращал нужные значения без обращения к таблице поиска, которая отображает вычисленные значения * 1007.* значение к фактическому значению, которое вы хотите вернуть.
Другой способ сделать это - создать массив функций:
Func<bool>[] funcs = new Func<bool>[] { f1, f2, f3, f4, f5 };
int x = 0;
foreach (var f in funcs)
{
x = (x << 1) | (int)f();
}
Или, если вы не хотите зависетьBoolean
всегда равен 0 или 1:
foreach (var f in funcs)
{
x <<= 1;
if (f())
x |= 1;
}
Добавлен позже, после того, как вы добавите дополнительные данные:
Вы говорите, что используете enum.Я предполагаю, что у вас есть значения от 0 до 31 (или, возможно, от 1 до 32), что-то вроде:
public enum OrderFormStatus
{
New = 1,
SomethingElse = 2,
// ... etc
}
Затем вы можете использовать приведенный выше код для генерации вашего значения и просто привести его к типу enum.То есть после вычисления x
напишите:
OrderFormStatus ofs = (OrderFormStatus)x;
Или, если ваши значения 1..32, а не 0..31:
OrderFormStatus ofs = (OrderFormStatus)(x+1);