首页 > 解决方案 > 编译器如何在具有相似签名的 2 之间选择方法?

问题描述

我有枚举

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

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

标签: c#.netenumsattributesiconvertible

解决方案


这里还有更多。

只需从网站:

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

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

编辑

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


推荐阅读