Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当使用对象参数传递此信息时,为什么Enum.GetName()会要求类型?_C#_.net_Parameters_Enums - Fatal编程技术网

C# 当使用对象参数传递此信息时,为什么Enum.GetName()会要求类型?

C# 当使用对象参数传递此信息时,为什么Enum.GetName()会要求类型?,c#,.net,parameters,enums,C#,.net,Parameters,Enums,考虑.NET函数签名: Enum.GetName(Type type, object o); 当此信息与对象o一起传递时,似乎完全没有必要询问类型 以下代码说明了这一点: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { public enu

考虑.NET函数签名:

Enum.GetName(Type type, object o);
当此信息与
对象o一起传递时,似乎完全没有必要询问
类型

以下代码说明了这一点:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    public enum Color
    {
        Black, White, Red, Orange, Yellow, Green, Blue, Purple, Pink,
        DarkRed, DarkGreen, DarkBlue,
        NeonGreen, NeonBlue
    }
    class Program
    {
        private static Random rand = new Random();

        static void Main(string[] args)
        {
            Color color = getRandomColor();
            PrintType(color);
            Console.WriteLine("typeof = " + typeof(Color));
            Console.ReadLine();
        }

        public static void PrintType(object o) 
        {
            Type type = o.GetType();
            Console.WriteLine("type = " + type);
        }

        private static Color getRandomColor()
        {
            var values = Enum.GetValues(typeof(Color));
            Color randomColor = (Color)values.GetValue(rand.Next(values.Length));
            return randomColor;
        }
    }
}
输出是

type = ConsoleApplication1.Color
typeof = ConsoleApplication1.Color
这意味着
Enum.GetName()
方法签名可以改为如下:

Enum.GetName(object o);

o
不需要是
颜色类型
。例如:

Enum.GetName(typeof(Color), 3) // == Orange

仅供参考,这是一个关于.NET框架的问题,而不是关于C#编程语言的问题。@JohnSaunders谢谢!回答得很好,但除非我有15个代表:(更好的问题是:他们为什么不添加一个简单的
Enum.GetName(Enum-enumval)呢
到类中?我总是把它放在我的工具类中,这是一件愚蠢的事情。@nyrguds我猜:因为这需要比Enum晚引入的泛型。@SebastianNegraszus实际上,我原本也这么认为,但你没有。你只需返回
Enum.GetName(enumval.GetType(),enumval)
。函数参数只接受类型
Enum
这一事实考虑到了类型安全性。如果给它
null
,它显然会失败,但在我看来这是完全值得的,而且无论如何,你都可以提前检查;)