【问题标题】:Get Current Class Name [duplicate]获取当前类名 [重复]
【发布时间】:2016-12-14 19:06:55
【问题描述】:

在 Android 中,如果我需要获取当前类的名称,我可以这样做:

private final _TAG = DummyActivity.this.getClass().getSimpleName();

这将返回“DummyActivity”

我想在 C# WPF 应用程序代码隐藏中做同样的事情。如何获取当前班级的名称?

this.GetType().Name; //this works only on instances of a class 

看起来唯一的选择是像这样在 C# 中对其进行硬编码:

private const string _TAG = "DummyWindow";

【问题讨论】:

  • 请注意,标记重复的问题比这更具体,询问编译时不可用的信息。但是,那里有很多答案,其中一些也适用于此。重要的是要注意,虽然标记的重复问题假定在静态基类方法中,它们可以判断它们是否是通过派生类调用的,但这实际上是不正确的。你能做的最好的就是找到声明类的类型,这就是这里要问的,在重复的地址中有答案。

标签: c# wpf


【解决方案1】:

instance 将完全是“当前的”,否则这个概念没有多大意义。如果您只想要一个已知的type 的名称,那就是typeof(Class).Name

【讨论】:

  • 但是 typeof(Class).Name 的结果不能赋值给常量
  • @dbnex14:你到底为什么需要将它分配给一个常量?好吧,因为你不使用FullName,我想你可以使用nameof(Class)
  • @dbnex14:另外,您可以将const 替换为readonly,您将能够用它做更多事情。 (它不再需要是编译时间常数。)
【解决方案2】:

试试

typeof(DummyActivity).Name

【讨论】:

    【解决方案3】:

    您可以使用以下任一方法:

    1.) typeof(T).Name (Vanilla .NET way)

    2.)nameof(T)(C#6 only)

    【讨论】:

      【解决方案4】:
      nameof(DummyActivity) == new DummyActivity().GetType().Name
      

      【讨论】:

      • nameof 仅在 C# 6.0 中支持
      【解决方案5】:

      你可以在 C# 中这样做:

      private static string _TAG = MethodBase.GetCurrentMethod().DeclaringType.Name;
      

      这将起作用,因为初始化此字段实际上发生在静态构造函数中。即MethodBase.GetCurrentMethod()返回类的静态构造函数。

      【讨论】:

      • 非常感谢。这也有效。但我接受了 H.B. 的回答,因为他首先回答,他的解决方案也有效。
      【解决方案6】:

      C# 6 中完全相同的语句:

      private static readonly string _TAG = nameof(DummyActivity);
      

      【讨论】:

      • 此问题与stackoverflow.com/questions/2081612/… 重复。假设那里还没有提到nameof 运算符的答案,您应该在那里发布您的答案并投票关闭这个问题作为另一个问题的副本,而不是把您的答案放在这里。坦率地说,无论如何,您的答案会在另一个问题中获得更多可见性;作为这样一个常见的重复,它的投票率很高,并且可以更容易地通过搜索找到。
      • @PeterDuniho 谢谢,会的!
      • @PeterDuniho:这个问题提到了类型是未知的,而nameof 仅适用于已知类型。
      • @PeterDuniho 我同意 H.B.,我的回答不适用于您发布的链接。这是有点重复...
      • @H.B.:确实,另一个问题的答案比问题要求的要广泛。我仍然认为它是重复的。基本上是同一个问题。在某些情况下,编译时语义就足够了。另一个问题确实包括解决该问题的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      • 2013-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多