Интерфейсы к основным советам по предотвращению дублирования кода в c #

В моем проекте есть несколько типов:

{
    List<string> strings;
    ColoredString[] coloredStrings;
    MulticoloredString[] multicoloredStrings;
}

В разных частях у меня одни и те же задачи, называемые "FindMaxWidth":

{
    int maxWidth1 = strings.Max((string str) => str.Length);
    int maxWidth2 = coloredStrings.Max((ColoredString cs) => cs.ToString().Length);
    int maxWidth3 = multicoloredStrings.Max((MulticoloredString ms) => ms.ToString().Length);
}

Я думаю, что иметь тот же вызов делегата Finc<> - плохой стиль. Но в С # я не могу реализовать настраиваемый интерфейс, такой как «Расширяемый», для базовых классов (я имею в виду строку). Это заставляет меня написать что-то такое:

public static Method(string[] strings1, IEnumerable<ColoredString> strings2, IEnumerable<MulticoloredString> strings3) {
        int maxWidth1 = strings.GetMaxLength();
        int maxWidth2 = strings2.GetMaxLength();
        int maxWidth3 = strings3.GetMaxLength();
    }
     
    public static GetMaxLength(IEnumerable<string> strings) {
        return strings.Max((string str) => str.Length);
    }
     
    public interface ILengthable {
        public Length { get; }
    }
     
    public static GetMaxLength<T>(this IEnumerable<T> enm) where T: ILengthable {
        return enm.Max((T t => t.Length)
    }

Мне не нужен действительно четкий код, но я думаю, что у меня все еще есть дублирование кода, худший из плохого стиля кодирования, не так ли ...?:

   >> return strings.Max((string str) => str.Length);
   >> return enm.Max((T t => t.Length)

Где я хочу взять строку в "Т". У меня вопрос: что мне делать, когда мне нужно привязать базовые типы к интерфейсам?


Ответы (0 шт):