如何使这些做同样事情的属性变干?
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 之前 - 您应该确保外观相似的代码将出于相同的原因进行更改。
我的 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 之前 - 您应该确保外观相似的代码将出于相同的原因进行更改。