我们在代码中发现了以下内容:
public static class ObjectContextExtensions
{
public static T Find<T>(this ObjectSet<T> set, int id, params Expression<Func<T, object>>[] includes) where T : class
{
...
}
public static T Find<T>(this ObjectSet<T> set, int id, params string[] includes) where T : class
{
...
}
}
正如您所看到的,这些签名都一样,除了params
参数。
它们被用于多种方式之一:
DBContext.Users.Find(userid.Value); //userid being an int? (Nullable<int>)
奇怪的是,这个代码片段会调用第一个重载函数。
Q1: 为什么这不会产生编译错误?
Q2: 为什么C#编译器会将上述调用解析为第一个方法?
Edit: 澄清一下,这是C# 4.0,.Net 4.0和Visual Studio 2010。