鉴于以下类:
public static class EnumHelper
{
//Overload 1
public static List<string> GetStrings<TEnum>(TEnum value)
{
return EnumHelper<TEnum>.GetStrings(value);
}
//Overload 2
public static List<string> GetStrings<TEnum>(IEnumerable<TEnum> value)
{
return EnumHelper<TEnum>.GetStrings(value);
}
}
应用什么规则来选择其两种通用方法之一?例如,在以下代码中:
List<MyEnum> list;
EnumHelper.GetStrings(list);
它最终会调用EnumHelper.GetStrings<List<MyEnum>>(List<MyEnum>)(即 Overload 1),即使它看起来同样有效EnumHelper.GetStrings<MyEnum>(IEnumerable<MyEnum>)(即 Overload 2)。
例如,如果我完全删除重载 1,那么调用仍然可以正常编译,而不是选择标记为重载 2 的方法。这似乎使泛型类型推断有点危险,因为它正在调用一个直观上看起来更糟糕匹配的方法. 我正在传递一个 List/Enumerable 作为类型,它看起来非常具体,似乎应该匹配具有类似参数的方法(IEnumerable<TEnum>),但它选择了具有更通用的通用参数的方法(TEnum value)。
温温酱
相关分类