我有这个代码,我添加和删除列表中的项目:
List<myClass> listofMyClass = new List<myClass>();
public void DoStuff(List<myClass> listofMyClass)
{
listofMyclass.Add(new myClass());
// Some code here
listofMyClass.Remove((myClass)someObject);
}
我想重构一下,以便不使用List<myClass>
而是使用任何列表作为参数。
因为我在解决方案中看到了与List<myClass2>
等相同的代码
我该如何进行重构呢?
由于
答案 0 :(得分:1)
使用泛型:
public void DoStuff<T>(List<T> listofMyClass) where T : new()
{
listofMyclass.Add(new T());
// Some code here
listofMyClass.Remove((T)someObject);
}
答案 1 :(得分:1)
public void DoStuff<TElement>(List<TElement> listofMyClass)
where TElement : new()
{
listofMyclass.Add(new TElement());
// Some code here
listofMyClass.Remove((TElement)someObject);
}
Add
和Remove
之间的代码必须处理通用类型。如果你负担不起,你可以写很多ifs:
TElement someObject = list.First();
if (typeof(TElement) == typeof(MyClass))
{
var casted = (MyClass)someObject;
//some Code
}
if (typeof(TElement) == typeof(MyClass2))
{
var casted = (MyClass2)someObject;
//some Code
}
// and so on.
您也可以使用我的库(link):
TElement someObject = list.First();
someObject.DetermineType().When<MyClass>(casted => { /* action */ })
.When<MyClass2>(casted => { /* action */ })
.Resolve();
但是请记住:这是&#34;糟糕的实践&#34; - 您需要对具体类型进行硬编码。也许为具体类型编写Add
和Remove
会更容易,而不是使用#34;暴力&#34;?