2016-08-08 133 views
0

在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"; 
+2

看到这个:http://stackoverflow.com/questions/2081612/net-determine-the-type-of-this-class-in-its-静态方法 –

+0

请注意标记的副本的问题比这更具体,要求在编译时不可用的信息。然而,这里有很多答案,其中有几个适用于此。重要的是要注意,虽然标记为重复的问题假设在静态基类方法中,它们可以告诉它们是否通过派生类被调用,但实际上这不正确。你可以做的最好的是找到声明类的类型,这就是这里所要求的,并且在重复地址中有答案。 –

回答

3

实例就确实是“当前”,这个概念并没有太大的意义,否则。如果你只是想知道类型的名称那将是typeof(Class).Name

+0

但typeof(Class).Name的结果不能分配给常数 – pixel

+0

@ dbnex14:为什么在世界中您需要将它分配给一个常量?那么,因为你不使用'FullName',你可以使用'nameof(Class)'我想。 –

+1

@ dbnex14:另外,你可以用'readonly'替换'const',你将能够做更多的事情。 (它不再需要编译时间常量。) –

2

尝试

typeof(DummyActivity).Name 
1
nameof(DummyActivity) == new DummyActivity().GetType().Name 
+0

'nameof'仅支持C#6.0 – Marusyk

3

呦ü可以用C#像这样做:

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

这工作,因为初始化该领域的静态构造函数实际情况。即,MethodBase.GetCurrentMethod()返回该类的静态构造函数。

+0

非常感谢。这也适用。但我先接受了H.B.的回答,他的解决方案也是如此。 – pixel

0

完全一样的语句在C#6:

private static readonly string _TAG = nameof(DummyActivity); 
+1

这个问题是http://stackoverflow.com/questions/2081612/net-determine-the-type-of-this-class-in-its-static-method的重复。假设没有提到'nameof'运算符的答案,你应该在那里发布你的答案并投票结束这个问题作为另一个问题的重复,而不是把你的答案放在这里。坦率地说,无论如何,你的答案会在另一个问题上获得更多的可见性。作为这样一个常见的副本,它是高度投票,并将通过搜索更容易找到。 –

+0

@PeterDuniho谢谢,会做! – CoolBots

+0

@PeterDuniho:这个问题提到,虽然类型是未知的,'nameof'只适用于已知类型。 –