C#中忽略大小写匹配数组元素并返回原始值的实现方法
解决C#中大小写不敏感的字符串匹配问题
嘿,这事儿好办!我帮你分两部分搞定:一是从数组里匹配到大小写不兼容但内容一致的原始字符串,二是修改你那辆车辆存在判断的方法,让它支持大小写不敏感校验。
1. 匹配大小写不敏感的原始字符串
如果你想从字符串数组里揪出和搜索词大小写不一样但内容相同的原始值,直接用LINQ的FirstOrDefault方法就行,配合StringComparison.OrdinalIgnoreCase做不敏感比较,既能忽略大小写,还能原样返回数组里的原始字符串。
示例代码:
using System.Linq; string[] names = { "alex" }; string searchTerm = "AlEx"; // 找到匹配的原始字符串 string matchedOriginal = names.FirstOrDefault(name => string.Equals(name, searchTerm, StringComparison.OrdinalIgnoreCase)); // 如果找到的话,matchedOriginal就是"alex" if (matchedOriginal != null) { Console.WriteLine($"匹配到原始值:{matchedOriginal}"); }
这里特意用OrdinalIgnoreCase是因为它基于Unicode码点做不敏感比较,比依赖系统文化的CurrentCultureIgnoreCase更稳定,不会因为系统设置搞出意外,这种场景下用它准没错。
2. 修改DoesCarExist方法支持大小写不敏感
你现在的方法用_identifiers.Contains(ID)默认是大小写敏感的,咱们只需要换成带比较规则的重载版本就行,或者用LINQ的Any方法也可以,两种方式都简单:
方法一:使用Contains重载(推荐)
public bool DoesCarExist(string ID) { // 忽略大小写检查是否包含目标ID return _identifiers.Contains(ID, StringComparer.OrdinalIgnoreCase); }
方法二:使用LINQ的Any方法
要是你更习惯LINQ的写法,也可以这么写:
using System.Linq; public bool DoesCarExist(string ID) { return _identifiers.Any(id => string.Equals(id, ID, StringComparison.OrdinalIgnoreCase)); }
3. 调整测试用例验证功能
把你的测试用例改成这样,就能验证各种大小写组合的场景了:
[Test] public void TestCaseInsensitive() { bool expected = true; Car cars = new Car(new string[] { "Nissan" }); // 测试不同大小写的输入 bool result1 = cars.DoesCarExist("nissan"); bool result2 = cars.DoesCarExist("NISSAN"); bool result3 = cars.DoesCarExist("NiSsAn"); Assert.AreEqual(expected, result1); Assert.AreEqual(expected, result2); Assert.AreEqual(expected, result3); }
这样不管用户输入啥大小写组合,都能正确返回true啦!
内容的提问来源于stack exchange,提问作者Pablo Escobar
相关产品推荐
相关产品推荐

