Is this is an ExpressionTrees bug? #3
Expressions class should be more accurate while searching for user-defined operators?

    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);
      }
    }

Also it's possible to define static `op_Explicit` or `op_Implicit` method with more than one arguments and Expression class accepts this method as an user-defined operator!

p.s. ExpressionTrees looking for operators with `BindingFlags.NonPublic` flag, it's allows to search operators in the user types, witch not directly visible for System.Core.dll, but it also allows the Expressions API to find private methods that "looks like" user-defined operators. But C# rules doesn't allows you to define and use non-public operators! I think the behavior of Expressions API should be the same...
Is this is an ExpressionTrees bug? #3
===

Expressions class should be more accurate while searching for user-defined operators?

    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);
      }
    }

Also it's possible to define static `op_Explicit` or `op_Implicit` method with more than one arguments and Expression class accepts this method as an user-defined operator!

p.s. ExpressionTrees looking for operators with `BindingFlags.NonPublic` flag, it's allows to search operators in the user types, witch not directly visible for System.Core.dll, but it also allows the Expressions API to find private methods that "looks like" user-defined operators. But C# rules doesn't allows you to define and use non-public operators! I think the behavior of Expressions API should be the same...