параметры перегружают кажущуюся неоднозначность - все еще компилируется и работает?

Мы только что нашли это в нашем коде:

public static class ObjectContextExtensions
{

    public static T Find(this ObjectSet set, int id, params Expression[] includes) where T : class
    {
        ...
    }

    public static T Find(this ObjectSet set, int id, params string[] includes) where T : class
    {
       ...
    }
}

Как видите, они имеют одинаковую подпись, за исключением.params

И они'используются несколькими способами, один из них:

DBContext.Users.Find(userid.Value); //userid being an int? (Nullable)

что, как ни странно для меня, разрешает первую перегрузку.

Q1: Почему нетt это приводит к ошибке компиляции?

Q2: Почему компилятор C # разрешает вышеуказанный вызов первого метода?

редактироватьПросто для пояснения, это C # 4.0, .Net 4.0, Visual Studio 2010.

Ответы на вопрос(3)

Ваш ответ на вопрос