将基于 .NET Framework 的项目迁移到基于 .NET Core 的过程中,发现原项目中抛出一个 AmbiguousException 的错误:
经排查,问题出现在下面的代码中:
Expression.Call(left, typeof (string).GetMethod("Contains"), right)
程序在动态组建 Lambda 表达式时,需要通过反射来获取 string 类型的 Contains 方法,但现在 Contains 方法貌似不见了...
我在 IDE 中尝试 "test".Contains(".."),发现 Contains 不但还在,而且使用时完全没有问题...
最后,通过 forums.asp.net 找到解决方法:
Expression.Call(left, typeof (string).GetMethod("Contains", new[] { typeof(string) }), right)
也就是,反射时需指定 参数 的 类型 。