【发布时间】:2009-11-30 15:39:47
【问题描述】:
我刚刚注意到重载解析的一个奇怪行为。
假设我有以下方法:
public static void DoSomething<T>(IEnumerable<T> items)
{
// Whatever
// For debugging
Console.WriteLine("DoSomething<T>(IEnumerable<T> items)");
}
现在,我知道这个方法通常会用少量显式参数调用,所以为了方便我添加这个重载:
public static void DoSomething<T>(params T[] items)
{
// Whatever
// For debugging
Console.WriteLine("DoSomething<T>(params T[] items)");
}
现在我尝试调用这些方法:
var items = new List<string> { "foo", "bar" };
DoSomething(items);
DoSomething("foo", "bar");
但在这两种情况下,都会调用 params 的重载。我本来希望在 List<T> 的情况下调用 IEnumerable<T> 重载,因为它似乎更匹配(至少对我而言)。
这种行为正常吗?谁能解释一下?我在 MSDN 文档中找不到任何明确的信息...这里涉及的重载解决规则是什么?
【问题讨论】:
标签: c# generics type-inference params-keyword overload-resolution