重构方法使用类作为参数

时间:2014-09-08 08:58:46

标签: c# c#-4.0 refactoring

我有这个代码,我添加和删除列表中的项目:

    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>等相同的代码

我该如何进行重构呢?

由于

2 个答案:

答案 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);

}

AddRemove 之间的代码必须处理通用类型。如果你负担不起,你可以写很多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; - 您需要对具体类型进行硬编码。也许为具体类型编写AddRemove会更容易,而不是使用#34;暴力&#34;?