【问题标题】:What's the difference (in this context) between a generic type and a type?泛型类型和类型之间有什么区别(在这种情况下)?
【发布时间】:2020-12-02 03:00:55
【问题描述】:

假设我有一个方法:

void MyMethod<T>() { }

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

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

没关系,但是T 在这里本质上是一个类型,MyMethod 关心的只是知道typeT 代表什么,那为什么我不能传递这样的类型:

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

我知道这不会编译,但我想知道为什么运行时会关心它是泛型还是 type,我的理解中缺少什么?

或者,换一种说法,MyMethod 内部可能会发生什么让我的建议失效?

【问题讨论】:

  • typeof(string) 返回System.Type 的实例,这是一个对象而不是类型。您只需使用类型本身,即MyMethod&lt;string&gt;();
  • @JohnathanBarclay - 谢谢伙计,我知道如何让它工作,它不是真正的代码。我在概念上问为什么通用方法/类不能接受type
  • C# 编译器所做的最重要的事情是验证代码对于满足约束的任何 T 来说是安全且正确的。为此,它需要知道 T,它不能处理仅在运行时具有值的对象。

标签: c# .net generics types


【解决方案1】:

因为typeof(string)运行时 进行评估,而T 是编译时常量,所以可以在编译时完成所需的约束测试。

【讨论】:

    猜你喜欢
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    相关资源
    最近更新 更多