C#/ .NET:是`typeof(variable)`一种可能的语言特性?

Joh*_*zen 9 .net c# specifications

在几个不同的场合,我试图从一个变量中哄骗声明的类型,相对远离它的声明,只是发现typeof(T)它只适用于类型名称.

我想知道是否会有任何突破性变化也允许typeof(variable).

例如,使用此代码:

class Animal { /* ... */ }
class Goat : Animal { /* ... */ }

/* ... */

var g = new Goat();
Animal a = g;

Console.WriteLine(typeof(Goat));
Console.WriteLine(typeof(Animal));
Console.WriteLine(g.GetType());
Console.WriteLine(a.GetType());
Run Code Online (Sandbox Code Playgroud)

你会得到类似的东西:

山羊
动物
山羊
山羊

为什么不可能这样做:

Console.WriteLine(typeof(g));
Console.WriteLine(typeof(a));
Run Code Online (Sandbox Code Playgroud)

山羊
动物

我粗略地看了一眼规格,发现没有任何冲突.我认为它会澄清"为什么这种类型?"的问题.使用typeof运营商时.

我知道编译器能够在这里.使用扩展方法的实现实际上是微不足道的:

public static Type TypeOf<T>(this T variable)
{
    return typeof(T);
}
Run Code Online (Sandbox Code Playgroud)

但这感觉很脏,滥用编译器的类型推断.

jas*_*son 3

假设允许:

class Animal { }

string Animal;
Type t = typeof(Animal); // uh-oh!
Run Code Online (Sandbox Code Playgroud)

  • @gmagana,如果局部变量获胜,那么您就破坏了许多预先存在的代码。如果类型获胜,那么这种语法就非常危险,因为您不太可能知道当前范围内的每一种类型。 (3认同)
  • 这不一定是问题......在您的情况下, typeof() 的行为可以像对 Animal 符号的任何其他引用一样:局部变量获胜。 (2认同)