【发布时间】:2016-09-02 17:52:29
【问题描述】:
ClassA、ClassB、ClassC和ClassD都实现了IMyClass接口。
myObj 是其中一个类的实例。
private void setObj<T>()
{
myObj = mycollection.Single(w => w is T);
}
public void Switch()
{
if(myObj is ClassA)
{
setObj<ClassA>();
}
else if(myObj is ClassB)
{
setObj<ClassB>();
}
else if(myObj is ClassC)
{
setObj<ClassC>();
}
else if(myObj is ClassD)
{
setObj<ClassD>();
}
}
我们如何重构Switch方法,让我有这样的东西:
public void Switch()
{
// How can we know from `myObj`, which class it is and rewrite
// the whole Switch method like this
// X = `ClassA`, `ClassB`, `ClassC` or `ClassD`
setObj<X>();
}
【问题讨论】:
-
让我确认我正确理解了这个问题:您可以将 Switch 方法作为泛型调用并传入类型吗?那么,
Switch<ClassA>()是可以接受的电话吗?如果是这样,您的重构建议应该可以正常工作。我错过了什么?
标签: c# class types interface refactoring