在以下逻辑中使用if / then的更好选择是什么:
public void DoSomething <T>()
{
if (typeof (T) == typeof (A))
{
}
else if (typeof (T) == typeof (B))
{
}
}
答案 0 :(得分:3)
你是对的,这是一种代码味道。
类似:
public void DoSomething <T>() where T : A
{
}
public void DoSomething <T>() where T : B
{
}
如果你这样做,那么它会感觉有点臭。一个更好的解决方案是同时拥有A&amp; B继承了一个通用接口,然后只有一个方法where T : IMyNewInterface
。 击>
如果真的不可能,那么这可能不是解决这个问题的方法,或者架构可能需要重新访问。
<强> CORRECTION 强>
以上代码无效,正如Eric在下面的评论中所述。泛型不构成签名的一部分,因此不能用于过载。
唯一的另一种选择是正常过载:
public void DoSomething(A a)
{
}
public void DoSomething(B b) {
}
答案 1 :(得分:3)
您可能会重载该方法:
public void DoSomething(A item)
{
...
}
public void DoSomething(B item)
{
...
}
答案 2 :(得分:0)
当您使用泛型时,您可能希望对象具有相似的类型或具有类似的方法命名。
根据您的描述,这是我首选的模式:
public void DoSomethingA() { }
public void DoSomethingB() { }