在搜索用户定义的运算符时,表达式类应该更准确吗?
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不直接可见,但它也允许Expressions API查找“看起来像”用户的私有方法 - 定义的运算符。但是C#规则不允许您定义和使用非公共运算符!我认为Expressions API的行为应该是相同的......