Как мне сделать эти свойства, которые делают то же самое, СУХОЙ? - PullRequest
1 голос
/ 22 сентября 2019

У моего класса есть 3 свойства, которые должны делать то же самое в пользовательском set, который я создал.Теперь я повторил это во всех 3, что не СУХОЙ.

Как мне сделать СУХОЙ?Просто поместите foreach в метод?Я чувствую, что, должно быть, есть более элегантный способ.

(также мне бы хотелось, чтобы мне не понадобились частные поля поддержки, потому что они немного раздражают глаз)

private List<string> _ImageTypes;
public List<string> ImageTypes
{
    get { return _ImageTypes; }
    set
    {
        _ImageTypes = new List<string>();
        foreach (var type in value)
            if (!string.IsNullOrEmpty(type))
                _ImageTypes.Add("." + type.Replace(".", "").Replace("*", ""));
    }
}

private List<string> _AnimationTypes;
public List<string> AnimationTypes
{
    get { return _AnimationTypes; }
    set
    {
        _AnimationTypes = new List<string>();
        foreach (var type in value)
            if (!string.IsNullOrEmpty(type))
                _AnimationTypes.Add("." + type.Replace(".", "").Replace("*", ""));
    }
}

private List<string> _VideoTypes;
public List<string> VideoTypes
{
    get { return _VideoTypes; }
    set
    {
        _VideoTypes = new List<string>();
        foreach (var type in value)
            if (!string.IsNullOrEmpty(type))
                _VideoTypes.Add("." + type.Replace(".", "").Replace("*", ""));
    }
}

1 Ответ

1 голос
/ 22 сентября 2019

Да, поместите его в метод

private List<string> CreateListFrom(List<string> list)
{
    return list.Where(type => !string.IsNullOrEmpty(type))
        .Select(type => type.Replace(".", "").Replace("*", ""))
        .Select(type => $".{type}")
        .ToList();
}

Затем используйте его в установщиках

private List<string> _ImageTypes;
public List<string> ImageTypes
{
    get { return _ImageTypes; }
    set
    {
        _ImageTypes = CreateListFrom(value);
    }
}

Другой подход - сделайте это в конструкторе, тогда вы сможете избавиться от частногочлены.Но это будет зависеть от того, как этот класс используется

Прежде чем говорить о DRY - вы должны быть уверены, что похожий код будет изменен по тем же причинам.

...