【发布时间】:2016-11-04 11:46:53
【问题描述】:
在C# 中,使用泛型参数来修改泛型方法的行为通常是一种不好的做法吗?
例如:
class Foo { }
class Bar { }
void GenericMethod<T>()
{
if (typeof(T) == typeof(Foo))
{
Console.WriteLine("execute action for Foo");
}
if (typeof(T) == typeof(Bar))
{
Console.WriteLine("execute action for Bar");
}
}
void NonGenericMethod(Type type)
{
if (type == typeof(Foo))
{
Console.WriteLine("execute action for Foo");
}
if (type == typeof(Bar))
{
Console.WriteLine("execute action for Bar");
}
}
抛开性能差异不谈,两种方法的效果是一样的。
我想知道的是,使用泛型参数来修改方法的行为(进行分支)是否是一个好主意。这会被认为是副作用吗?
【问题讨论】:
-
抛开性能差异 - 存在哪些性能差异?
-
假设你不能使用重载(为什么不呢?),它本质上没有任何问题。
-
您可以将该方法放在 Square 和 Circle 的基类上,所以只需使用常规继承即可。否则,差别不大。
-
@Evk 作为示例提供的实际类对于该问题并不重要。问题只是关于通用参数的用法。
-
通用版本使用起来有点尴尬,因为
T无法推断。如果非要打GenericMethod<Square>(),不如直接打MethodForSquares()。
标签: c# .net generics clr generic-method