如何使这些做同样事情的属性变干?

How do I make these properties that do the same thing DRY?

我的 class 有 3 个属性必须在我制作的自定义 set 中做同样的事情。 现在我在所有 3 个中都重复了这个,这不是 DRY。

如何让这个变干?只是将 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("*", ""));
    }
}

对,放在方法里

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

然后在setter中使用它

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

另一种方法 - 在构造函数中执行,然后您可以摆脱私有成员。 但这将取决于 class 的消费方式

在谈论 DRY 之前 - 您应该确保外观相似的代码将出于相同的原因进行更改。