列表字符串元素以/开头时Contains匹配返回false的问题排查
代码问题原因
核心错误是Contains方法的调用主体和参数写反了:
string.Contains(子串)的语义是判断当前字符串是否包含传入的子串,你代码中写的是searchString.Contains(x):
此时searchString的值是长度为3的"abc",遍历到第一个列表元素时x的值是长度为4的"/abc",短字符串不可能包含更长的字符串,因此判断结果永远为false。- 如果你需要实现「列表中存在包含搜索字符串的元素就返回true」的逻辑,修正后代码如下:
var searchString = "abc"; var list= new List<string>() { "/abc", "/xyz" }; bool found= list.Any(x => x.Contains(searchString, StringComparison.CurrentCultureIgnoreCase));
- 如果你实际需要的是精确匹配(即列表中必须存在值为
"/" + 搜索字符串的元素),可以改用相等判断性能更高:
var searchString = "abc"; var list= new List<string>() { "/abc", "/xyz" }; bool found = list.Any(x => x.Equals($"/{searchString}", StringComparison.CurrentCultureIgnoreCase));
内容的提问来源于stack exchange,提问作者user17040108
相关产品推荐
相关产品推荐

