将基于 .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)

也就是,反射时需指定 参数类型