我刚刚注意到重载决议的一个奇怪行为。
假设我有以下方法:
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
但在这两种情况下,都会调用with 的重载。我本来希望IEnumerable<T>
在 a 的情况下调用重载List<T>
,因为它似乎是一个更好的匹配(至少对我来说)。
这种行为正常吗?谁能解释一下?我在 MSDN 文档中找不到任何明确的信息......这里涉及的重载解决规则是什么?