【发布时间】:2020-12-02 03:00:55
【问题描述】:
假设我有一个方法:
void MyMethod<T>() { }
我可以从另一个通用方法调用它:
void MyCallingMethod<T>()
{
MyMethod<T>();
}
没关系,但是T 在这里本质上是一个类型,MyMethod 关心的只是知道type 由T 代表什么,那为什么我不能传递这样的类型:
void MyIllegalCallingMethod()
{
MyMethod<typeof(string)>();
}
我知道这不会编译,但我想知道为什么运行时会关心它是泛型还是 type,我的理解中缺少什么?
或者,换一种说法,MyMethod 内部可能会发生什么让我的建议失效?
【问题讨论】:
-
typeof(string)返回System.Type的实例,这是一个对象而不是类型。您只需使用类型本身,即MyMethod<string>(); -
@JohnathanBarclay - 谢谢伙计,我知道如何让它工作,它不是真正的代码。我在概念上问为什么通用方法/类不能接受
type。 -
C# 编译器所做的最重要的事情是验证代码对于满足约束的任何 T 来说是安全且正确的。为此,它需要知道 T,它不能处理仅在运行时具有值的对象。