C# 重构方法以使用类作为参数
我使用以下代码添加和删除列表中的项目:C# 重构方法以使用类作为参数,c#,c#-4.0,refactoring,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((myCla
List<myClass> listofMyClass = new List<myClass>();
public void DoStuff(List<myClass> listofMyClass)
{
listofMyclass.Add(new myClass());
// Some code here
listofMyClass.Remove((myClass)someObject);
}
List listofMyClass=new List();
公共无效DoStuff(周期类列表)
{
添加(新的myClass());
//这里有一些代码
移除((myClass)someObject);
}
我想重构它,这样就不用List
我可以使用任何东西的列表作为参数
因为我在解决方案中看到了与List
相同的代码,等等
我应该如何进行重构
感谢使用泛型:
public void DoStuff<T>(List<T> listofMyClass) where T : new()
{
listofMyclass.Add(new T());
// Some code here
listofMyClass.Remove((T)someObject);
}
public void DoStuff(周期类列表),其中T:new()
{
添加(新的T());
//这里有一些代码
移除((T)someObject);
}
你是说这样的事吗
public void DoStuff<TElement>(List<TElement> listofMyClass)
where TElement : new()
{
listofMyclass.Add(new TElement());
// Some code here
listofMyClass.Remove((TElement)someObject);
}
您也可以使用my library():
TElement someObject=list.First();
someObject.DetermineType().When(casted=>{/*action*/})
.When(casted=>{/*action*/})
.Resolve();
但请记住:这是“糟糕的实践”——您需要硬编码具体类型。也许为具体类型编写Add
和Remove
会更容易,而不是使用“蛮力”使其泛型?Google“泛型”。完成后,它将类似于publicvidodostuff(周期列表)
。我不会将此作为答案发布,因为我目前没有时间详细说明您的方法的主体。
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.
TElement someObject = list.First();
someObject.DetermineType().When<MyClass>(casted => { /* action */ })
.When<MyClass2>(casted => { /* action */ })
.Resolve();