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,但是应该尽一切努力避免使用此技巧。

07-26 09:28