不区分大小写的List.Contains():方法'Contains'的重载没有2个参数

Don*_* Ch 0 c#

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)

Sel*_*enç 6

dynamic表达式的类型也是动态的。由于您具有动态变量,因此将variable.ToString在运行时而不是在编译时解析的类型。因此,它被视为dynamic编译器找不到Containsdynamic第一个参数为参数的方法。

您可以string按照注释中的建议进行强制转换,因为强制转换是编译时的事情,并使编译器将变量视为字符串,所以它可以正常工作。