Мы только что нашли их в нашем коде:
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>)
который, как ни странно для меня, разрешается до первой перегрузки.
Вопрос 1. Почему это не приводит к ошибке компиляции?
Вопрос 2. Почему компилятор C# разрешает вышеуказанный вызов первому методу?
Редактировать: поясняю, это C# 4.0, .Net 4.0, Visual Studio 2010.
params
можно полностью исключить из параметров вызова (см. здесь: msdn. microsoft.com/en-us/library/w5zay9db.aspx), то я приближался к значению «первый определенный». - person Katie Kilian   schedule 07.01.2014params
и зададите оба значения по умолчанию дляnull
? - person leppie   schedule 07.01.2014