【问题标题】:Typeof considers class instead of variabletypeof 考虑类而不是变量
【发布时间】:2017-04-05 18:52:09
【问题描述】:

有一个与类同名的字符串变量。 Console.WriteLine"我显示的时候显示的是字符串内容,但是我尝试typeof()时却指向了类。为什么?

class Fun { }
class MyFun
{
    static void Main()
    {
        string Fun = "hello, world";
        string s = Fun;
        Type t = typeof(Fun);
        Console.WriteLine(s);
        Console.WriteLine(t);
    }
}

【问题讨论】:

  • 因为typeof 期望类型作为参数
  • 就是这样定义的。您可以在变量上使用 GetType
  • 更多“有趣”和相关性:class Fun { public static int Length => 42; } class MyFun { static void Main() { string Fun = "hello, world"; var greatFun = Fun.Length; } } 在这种情况下,Fun.Length 可以是局部变量的实例属性,也可以是类型的 static 属性。假设第一个。要获得第二个,请使用命名空间限定 Fun(如有必要,使用 global:: 命名空间别名)。 这是不使用大写首字母命名局部变量的原因之一。

标签: c# asp.net variables typeof


【解决方案1】:

由于Fun 是一个局部变量,而不是类型名称(例如string),正确的语法是

 Type t = Fun.GetType();

或者(如果你想要typeof):

 Type t = typeof(string);

详情请参阅https://msdn.microsoft.com/en-us/library/58918ffs.aspxhttps://msdn.microsoft.com/en-us/library/system.object.gettype.aspx

【讨论】:

    【解决方案2】:

    因为你不能typeof 一个变量,只是一个类型。因此,该类被选中。

    对于变量,您可以访问object.GetType()

    Type t = Fun?.GetType();
    

    【讨论】:

      猜你喜欢
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      相关资源
      最近更新 更多