在 Java 中,我可以简单地拥有这样的类名:
public class MyClass
{
public static String toString(Class<?> classType)
{
return classType.getName() ;
}
}
package this.that;
public class OneClass
{
}
public static void main()
{
System.out.println(MyClass.toString(OneClass));
}
给我完整的 class 名称“this.that.OneClass”。
我在 C#中尝试了相同的操作,但是收到了我使用OneClass作为类型的错误。
public class MyClass
{
public static String ToString(Type classType)
{
return classType.Name ;
}
}
namespace this.that
{
public class OneClass
{
}
}
static Main()
{
Console.WriteLine(MyClass.ToString(OneClass)); // expecting "this.that.OneClass" result
}
请注意,我不想使用类实例
最佳答案
首先,让我们修复您的Java代码:此调用
System.out.println(MyClass.toString(OneClass));
除非您将
.class
添加到OneClass
中,否则不会编译:System.out.println(MyClass.toString(OneClass.class));
C#中
.class
语法的等效构造是typeof
。它采用类型名称,并产生相应的System.Type
对象:Console.WriteLine(MyClass.ToString(typeof(OneClass)));
另外,C#不允许
this
作为标识符*,因此您应该重命名命名空间以排除关键字。最后,Name
将打印类的非限定名称。如果您想使用名称空间查看名称,请使用FullName
属性:public static String ToString(Type classType) {
return classType.FullName;
}
Demo.
*如果您给
this
加上前缀@
,则该语言允许您使用ojit_code,但是应该尽一切努力避免使用此技巧。