Задать вопрос
@KislyFan
инженер, связист и просто любитель выпить

Как лучше оптимизировать следующий код?

Приветствую! Мне по насладству досталось немного кода, который я хочу поменять на более читаемый.
Для примера я максимально упростил класс. В текущей реализации программы у меня ест два 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;

            }
        }
  • Вопрос задан
  • 49 просмотров
Подписаться 1 Простой 7 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы