假设我有一个方法:
void MyMethod<T>() { }
我可以从另一个通用方法中调用它:
void MyCallingMethod<T>()
{
MyMethod<T>();
}
这很好,但是T
本质上是一种类型,所有MyMethod
关心的都是知道type
代表T
代表什么,所以我为什么不能通过像这样的类型:
void MyIllegalCallingMethod()
{
MyMethod<typeof(string)>();
}
我知道它无法编译,但是我想知道为什么运行时会关心它是通用的还是type
,我的理解是什么?
或者,换句话说,MyMethod
内部可能发生什么事情,这会使我的建议中断?
答案 0 :(得分:3)
由于typeof(string)
是在 runtime 时求值的,而T
是编译时常量,因此可以在编译时进行所需的约束测试。