我觉得 Enum.Format() 的第一个参数有点多余

本文关键字:参数 第一个 多余 Enum Format | 更新日期: 2023-09-27 17:56:08

我有代码吹:

enum Days
{
    day1,
    day2,
    day3
}
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Enum.Format(typeof(Days), Days.day2, "D"));
    }
}

我觉得 Enum.Format() 的第一个参数是多余的:因为第二个参数已经指定了 Enum 的类型,所以编译器将获得"day2"类型为"Days"的信息。那为什么编译不推断第一个参数是"typeof(Days)"本身,为什么我必须指定它?

换句话说,我的意思是,如果 Enum.Format 的 .net 函数只有 2 个参数,为什么不能呢?类型可以从值参数中知道。

我觉得 Enum.Format() 的第一个参数有点多余

因为您可以在 value 参数中使用enum的基础类型,例如:

public enum MyEnum
{
    Foo = 1
}
string str = Enum.Format(typeof(MyEnum), 1, "G"); // Foo

但请注意:

public enum MyEnum : long
{
    Foo = 1
}
string str = Enum.Format(typeof(MyEnum), 1L, "G");

正如我所写的,你必须使用底层类型!所以在这种情况下,long.

这在 Enum.Format 中非常间接地拼写出来:

ArgumentException:的类型不是 enumType 的基础类型。

因此,隐式地,如果属于enumType的基础类型,则没有异常,并且返回一些结果。