(在这种情况下)泛型类型和类型之间有什么区别?

时间:2020-08-12 11:05:52

标签: c# .net generics types

假设我有一个方法:

void MyMethod<T>() { }

我可以从另一个通用方法中调用它:

void MyCallingMethod<T>()
{
   MyMethod<T>();
}

这很好,但是T本质上是一种类型,所有MyMethod关心的都是知道type代表T代表什么,所以我为什么不能通过像这样的类型:

void MyIllegalCallingMethod()
{
   MyMethod<typeof(string)>();
}

我知道它无法编译,但是我想知道为什么运行时会关心它是通用的还是type,我的理解是什么?

或者,换句话说,MyMethod内部可能发生什么事情,这会使我的建议中断?

1 个答案:

答案 0 :(得分:3)

由于typeof(string)是在 runtime 时求值的,而T是编译时常量,因此可以在编译时进行所需的约束测试。