我需要测试字符串数组中所有值仅是“ 0”还是“ 1”,并尝试以下代码未成功:
bool isBool = Array.TrueForAll(str, val => val.Trim() == "0" || val.Trim() == "1");
和
bool isBool = str.All(val => val.Trim() == "0" || val.Trim() == "1");
因为我使用的是||,所以有其他方法可以执行此操作吗?条件?
答案 0 :(得分:0)
您可以尝试Any()并在第一个失败条件!str.Any(x => x.Trim() != "0" && x.Trim() != "1")
中返回
答案 1 :(得分:0)
我假设您的意思是值必须全部为1或0?在这种情况下,您需要分别测试每种情况。当数组仅包含0或1时,您现有的代码为true。如果任何一个值为2,那将是错误的。一种解决方案:
var allAreZero = new string[] { " 0 ", " 0", " 0" };
var allAreOne = new string[] { " 1 ", "1", " 1" };
var mixedOnesAndZeros = new string[] { " 1 ", "0", " 1" };
private bool ArrayIsExclusivelyTrueOrFalse(string[] data)
{
return data.All(i => int.TryParse(i, out int value) && value == 0) ||
data.All(i => int.TryParse(i, out int value) && value == 1);
}
ArrayIsExclusivelyTrueOrFalse(allAreZero); // true
ArrayIsExclusivelyTrueOrFalse(allAreOne); // true
ArrayIsExclusivelyTrueOrFalse(mixedOnesAndZeros); // false
答案 2 :(得分:0)
如果您要确保数组中的所有值都是ALL "0"
或ALL "1"
(而不是"0"
和"1"
的混合最初阅读),那么一种方法是确保Distinct
项的数量(修剪后)的Count
为1
(意味着它们都是相同的),并且该项目是有效值集合的成员(在下面的代码中,我们只检查第一个项目,因为我们已经知道它们当时完全相同)。
例如:
var validValues = new[] {"0", "1"};
var isBool = str.Select(i => i.Trim()).Distinct().Count() == 1 &&
validValues.Contains(str[0].Trim());
答案 3 :(得分:0)
尝试一下
var isBool = !str.Select(s => s.Trim()).Distinct().Any(s => s != "0" && s != "1");