Приветствую! Мне по насладству досталось немного кода, который я хочу поменять на более читаемый.
Для примера я максимально упростил класс. В текущей реализации программы у меня ест два Enum, один определяет тип данных - это тип, другой - количество битов в маске с флагами.
public class MyClass
{
public MyTypes type {get; set;}
public BitArray flags {get; set;}
public MyClass(MyTypes type)
{
this.type = type;
this.bitarray = new BitArray(MyClass.ReadFlagsLength())
}
public static int ReadFlagsLength()
{
int bitmapLength = Convert.ToInt32(Enum.Parse(
typeof(HeaderBitmapsLength),
this.Type.ToString()
));
return bitmapLength;
}
public enum MyTypes : UInt32
{
Type1 = 0x00,
Type2 = 0x01,
Type3 = 0x10
}
public enum MyTypesBitArrayLength : UInt32
{
Type1 = 0x04,
Type2 = 0x10,
Type3 = 0x04
}
}
Это работает, но я хочу сделать код более простым. Я хочу избавиться от этих преобразований c Enum. На ум приходит только статический конструктор в котором будет заполняться словарь Type -> BitArrayLength, из которого я уже без преобразований смогу достать длину массива бит. Это можно сделать еще проще ?
Вариант Б это классический switch-case
public static int GetFlagsLength(MyTypes type)
{
switch (type)
{
case MyTypes.Type1 | MyTypes.Type3 :
return 0x04;
case MyTypes.Type1 :
return 0x10;
case
default:
return -1;
}
}