0

我有枚举

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()会采用第一种方法。

为什么会发生这种情况,因为对我来说第二种方法的执行更加明显(试图改变排序顺序,但没有帮助)。

4

2 回答 2

1

这里还有更多。

只需从网站:

当您有两个名称相同但签名不同的方法时,会发生重载。在编译时,编译器会根据参数的编译时类型和方法调用的目标来确定要调用哪一个。

并且当编译器无法推断出哪个是正确的时,编译器返回错误。

编辑

基于类型参数的约束枚举类枚举是结构和实现IConvertible,因此满足要求和编译器使用首先匹配。与 Enum 没有冲突,因为 Enum 在继承层次结构中比结构更喜欢。

于 2018-11-21T12:09:47.887 回答
1

签名:

public static string GetStringValue<TFrom>(this TFrom enumValue) 

是一个通用签名,这意味着它允许被视为:

public static string GetStringValue<ContentMIMEType>(this ContentMIMEType enumValue) 

比以下更具体:

public static string GetStringValue(this Enum @enum)

因此是选择的方法。

于 2018-11-21T12:53:21.190 回答