输入参数与泛型

Mat*_*ley 7 c# generics

有没有理由使用Type参数而不是泛型,即:

// this...
void Foo(Type T);
// ...over this.
void Foo<T>();
Run Code Online (Sandbox Code Playgroud)

在我看来,泛型更有用,因为它们提供泛型约束和C#4.0,逆变和协变,以及可能还有一些我不知道的其他功能.在我看来,通用形式具有所有优点,并且没有第一个也不具有的负面效果.那么,有没有你使用第一个的情况?

Jon*_*eet 9

绝对:当你直到执行时才知道类型.例如:

foreach (Type t in someAssembly.GetTypes())
{
    Foo(t);
}
Run Code Online (Sandbox Code Playgroud)

Foo通用时这样做是一个痛苦的屁股.这是可行的,但很痛苦.

它还允许参数null,这在某些情况下可能会有所帮助.

  • 绝对 - 虽然痛苦对我来说通常更重要:) (2认同)