如何测试字符串数组是否为布尔值

时间:2019-02-21 20:03:58

标签: c# arrays boolean

我需要测试字符串数组中所有值仅是“ 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");

因为我使用的是||,所以有其他方法可以执行此操作吗?条件?

4 个答案:

答案 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项的数量(修剪后)的Count1(意味着它们都是相同的),并且该项目是有效值集合的成员(在下面的代码中,我们只检查第一个项目,因为我们已经知道它们当时完全相同)。

例如:

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");