C# LINQ:如何检测字符串数组含Error或元素为空/Null
解决方案
首先需要注意:你的原代码myStringArray.Contains("Error", StringComparer.InvariantCultureIgnoreCase)是判断数组中是否存在精确等于"Error"(忽略大小写)的元素,而非包含"Error"文本的元素。如果你的真实需求是检测元素中包含"Error"(忽略大小写),需要用Any方法配合字符串判断。
下面分两种场景处理你的需求:
场景1:判断数组中是否存在「包含Error的元素」或「空/Null元素」
只要满足其中一种情况就返回true,用逻辑或||组合两个判断:
bool hasErrorOrNullOrEmpty = myStringArray.Any(s => string.IsNullOrEmpty(s) || s.IndexOf("Error", StringComparison.InvariantCultureIgnoreCase) >= 0);
场景2:判断数组中是否同时存在「包含Error的元素」和「空/Null元素」
两种情况都满足才返回true,用逻辑与&&组合:
bool hasErrorAndNullOrEmpty = myStringArray.Any(s => s.IndexOf("Error", StringComparison.InvariantCultureIgnoreCase) >= 0) && myStringArray.Any(s => string.IsNullOrEmpty(s));
如果你的原需求确实是精确匹配"Error"(忽略大小写)而非包含,只需把上面的s.IndexOf(...) >= 0替换为string.Equals(s, "Error", StringComparison.InvariantCultureIgnoreCase)即可:
精确匹配时的场景1:
bool hasErrorOrNullOrEmpty = myStringArray.Any(s => string.IsNullOrEmpty(s) || string.Equals(s, "Error", StringComparison.InvariantCultureIgnoreCase));
精确匹配时的场景2:
bool hasErrorAndNullOrEmpty = myStringArray.Any(s => string.Equals(s, "Error", StringComparison.InvariantCultureIgnoreCase)) && myStringArray.Any(s => string.IsNullOrEmpty(s));
内容的提问来源于stack exchange,提问作者gymcode
相关产品推荐
相关产品推荐

