Подтвердить что ты не робот

Это ошибка ExpressionTrees? # 3

Класс выражений должен быть более точным при поиске пользовательских операторов?

sealed class Foo
{
  // just the private static method!
  private static int op_Implicit() { return 1; }

  public static implicit operator int(Foo foo) { return 2; }
}

public class Program
{
  private static void Main()
  {
    var param = Expression.Parameter(typeof(Foo), "x");

    // IndexOutOfRangeException was unhandled!
    var lambda = Expression.Lambda<Func<Foo, int>>(
      Expression.Convert(param, typeof (int)), param);
  }
}

Также возможно определить статический метод op_Explicit или op_Implicit с более чем одним аргументом, а класс Expression принимает этот метод как пользовательский оператор!

p.s. ExpressionTrees ищет операторов с флагом BindingFlags.NonPublic, он позволяет искать операторы в пользовательских типах, которые не видны непосредственно для System.Core.dll, но также позволяет API выражений находить частные методы, которые "выглядят" как пользовательские операторы. Но правила С# не позволяют вам определять и использовать негосударственные операторы! Я думаю, что поведение API выражений должно быть одинаковым...

4b9b3361