C#不区分大小写的List.Contains():方法'Contains'的重载没有2个参数
如果我们这样做,就会得到编译器错误
list.Contains(stringToSearchDynamic.ToString(), StringComparer.OrdinalIgnoreCase)
Run Code Online (Sandbox Code Playgroud)
但是如果我们把实际字符串编译好
list.Contains(stringToSearch, StringComparer.OrdinalIgnoreCase)
Run Code Online (Sandbox Code Playgroud)
这是编译器错误吗?
码:
List<string> list = new List<string>();
list.Add("one");
list.Add("two");
string stringToSearch = "OnE";
dynamic stringToSearchDynamic = "OnE";
//compiles OK
bool isContained = list.Contains(stringToSearch, StringComparer.OrdinalIgnoreCase);
//Does NOT compile
isContained = list.Contains(stringToSearchDynamic.ToString(), StringComparer.OrdinalIgnoreCase);
Run Code Online (Sandbox Code Playgroud)
dynamic表达式的类型也是动态的。由于您具有动态变量,因此将variable.ToString在运行时而不是在编译时解析的类型。因此,它被视为dynamic编译器找不到Contains以dynamic第一个参数为参数的方法。
您可以string按照注释中的建议进行强制转换,因为强制转换是编译时的事情,并使编译器将变量视为字符串,所以它可以正常工作。