【发布时间】:2014-06-05 17:45:04
【问题描述】:
所以,我遇到了与以下类似代码的问题:
public static String MyFunc<T>(this IEnumerable<T> list) where T : struct
{
... some code ...
return myString;
}
public static String MyFunc<T>(this T o) where T : struct
{
... some code ...
return myString;
}
问题在于,当尝试在 List 上调用 MyFunc 时,它使用第二个函数而不是接受 IEnumerable 的函数。我知道这与方差有关,但我不确定如何强制它使用第一个函数而不是第二个函数。我用来调用第一个的代码是:
List<int> x = new List<int>();
String s = x.MyFunc();
上面的代码立即转到第二个函数,我需要它来使用第一个函数。如何强制执行所需的行为?顺便说一句,我使用的是 .NET 4.0
【问题讨论】:
-
在这种情况下,由于
where T : struct在第二种情况下,它实际上不会编译;该重载将被选择,但随后被发现是无效的。
标签: c# generics overriding variance