【发布时间】:2019-08-08 13:18:58
【问题描述】:
C# 不区分大小写的 List.Contains():方法“包含”没有重载需要 2 个参数
如果我们这样做会得到编译器错误
list.Contains(stringToSearchDynamic.ToString(), StringComparer.OrdinalIgnoreCase)
但是如果我们输入实际的字符串,编译就可以了
list.Contains(stringToSearch, StringComparer.OrdinalIgnoreCase)
这是编译器错误吗?
代码:
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);
【问题讨论】:
-
首先,没有必要将
ToString()与字符串一起使用。它本质上是一个返回字符串本身的空操作。如果字符串作为对象传递,一个简单的强制转换就足够了 -
只是为了更清楚
-
@LydonCh 演员表总是更清晰。在这种情况下,它会完全避免这个问题
-
@PanagiotisKanavos 你是对的,演员表也有效,因为它告诉编译器它是什么类型。所以如果我做 list.Contains( (stringToSearchDynamic as string), StringComparer.OrdinalIgnoreCase)
标签: c#