关于Object.GetType()的混淆。名称

时间:2017-06-10 10:58:55

标签: c#

using System;

namespace somens
{
    class GettingTypeName
    {
        static void MethodUsingVar()
        {
            var someInt = 0;
            Console.WriteLine("someInt is a : {0}", someInt.GetType().FullName);    
            Console.WriteLine("someInt is a : {0}", someInt.GetType().Name); //Why .Name?
        }   

        static void Main(string[] args)
        {
            MethodUsingVar();
            Console.ReadLine();    
        }
    }
}

//Output
//someInt is a : System.Int32;
//someInt is a : Int32;

我理解someInt.GetType().FullName的用法,因为它“获取类型的完全限定名称”,(引自Microsoft)。

但我不知道为什么someInt.GetType().Name会给Int32.返回的NameType属性获取当前成员的名称。 “(来自同一个Microsoft页面的另一个引用https://msdn.microsoft.com/en-us/library/system.type(v=vs.110).aspx

由于它用于特定类型的成员名称,代码如何输出正确的类型名称(没有名称空间)?它没有意义。

由于

3 个答案:

答案 0 :(得分:3)

  

返回的Type类的名称属性" 获取当前成员的名称。"

这就是它所说的,因为它是MemberInfo.Name的一般描述。这没有错,但并不完全清楚。类型System.Int32mscorlib主要模块的成员。您通常不会将其视为成员,但它确实意味着它获得了该类型的名称。

答案 1 :(得分:3)

此处的“成员”不是您的变量 - 它是命名空间(或程序集或模块,如果您需要)的成员。 (遗憾的是文档是从MemberInfo继承的 - 如果它说“类型名称”会更清楚。)

您正在处理Type - 无论是拨打Type还是使用GetType(),您都会获得相同的typeof(int)对象。类型是Int32命名空间中的System类型,因此其全名为System.Int32,其名称为Int32Type对象的变量无知识

答案 2 :(得分:-2)

.FullName - 返回对象类型的名称,包括命名空间和程序集描述

.Name - 仅返回对象的类型名称