CLR泛型方法基于泛型参数的类型进行分支

时间:2016-11-04 11:46:54

标签: c# .net generics clr generic-method

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");
    }
}

除了性能差异外,两种方法都会产生相同的效果。

我想知道的是,使用泛型参数修改方法的行为(进行分支)是否是一个好主意。这可能被视为副作用吗?

1 个答案:

答案 0 :(得分:0)

使用泛型方法的好处是你可以在不使用反射的情况下进一步调用其他泛型方法:

void GenericMethod<T>()
{
     AnotherGenericMethod<T>();
}

非泛型方法需要反射来进行相同的调用。