我有Enum
public enum ContentMIMEType
{
[StringValue("application/vnd.ms-excel")]
Xls,
[StringValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")]
Xlsx
}
在扩展中,我有两种方法来获得属性值:
public static string GetStringValue<TFrom>(this TFrom enumValue)
where TFrom : struct, IConvertible
{
...
}
和
public static string GetStringValue(this Enum @enum)
{
...
}
这些方法有不同的签名,但当我执行下一个操作ContentMIMEType.Xlsx.GetStringValue()
时,将采用第一个方法。
为什么会发生这种情况,因为对我来说,第二个方法的执行更明显(我试图改变排序顺序,但无济于事(。
以下是更多信息。
简单地从网站:
重载是指当您有两个方法具有相同名称,但签名不同。在编译时,编译器计算出根据参数和方法调用的目标。
当编译程序无法扣除哪个是正确的时,编译程序返回错误。
编辑:
基于对类型参数和枚举类的约束,枚举是IConvertible
的结构和实现,因此满足要求,编译器使用首先匹配。与Enum没有冲突,因为Enum是继承层次结构中的情人而非结构。
签名:
public static string GetStringValue<TFrom>(this TFrom enumValue)
是一个通用签名,这意味着它可以被视为:
public static string GetStringValue<ContentMIMEType>(this ContentMIMEType enumValue)
哪个比更具体
public static string GetStringValue(this Enum @enum)
因此选择了这种方法。