C# 当使用对象参数传递此信息时,为什么Enum.GetName()会要求类型?
考虑.NET函数签名: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
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
,它显然会失败,但在我看来这是完全值得的,而且无论如何,你都可以提前检查;)