C#:有没有办法确定一系列元素是否为空?

时间:2010-10-10 22:40:12

标签: c# arrays

我想知道是否有一种确定某个数组元素范围是否为空的方法。例如,如果使用值为“”的10个元素初始化数组,那么如果数据稍后被分配给元素5,7,9;我可以测试元素0-3是否为空,或者是否包含空字符串“”?

4 个答案:

答案 0 :(得分:5)

array.Skip(startIndex).Take(count).All(x => string.IsNullOrEmpty(x));

所以,如果你想检查元素0-3:

array.Skip(0).Take(4).All(x => string.IsNullOrEmpty(x));

为清楚起见,我将Skip留在那里。

编辑:根据Jonathan在另一个答案中的评论(而现在是Guffa在我的评论中所说的那样),使其成为Take(4)而不是3。)。

编辑2:根据以下评论,OP希望了解是否匹配任何元素:

array.Skip(0).Take(4).Any(x => string.IsNullOrEmpty(x));

已将All更改为Any

答案 1 :(得分:3)

bool is0to3empty = myArrayOfString.Skip(0).Take(4).All(i => string.IsNullOrEmpty(i));

答案 2 :(得分:2)

最直接和最有效的方法是简单地遍历数组的那一部分:

bool empty = true;..
for (int i = 0; i <= 3; i++) {
  if (!String.IsNullOrEmpty(theArray[i])) {
    empty = false;
    break;
  }
}
if (empty) {
  // items 0..3 are empty
}

另一种选择是使用扩展方法来进行循环:

bool empty = theArray.Take(4).All(String.IsNullOrEmpty);

答案 3 :(得分:1)

创建此扩展类,您可以从任何字符串数组中调用它:

    public static class IsEmptyInRangeExtension
    {
        public static bool IsEmptyInRange(this IEnumerable<string> strings, int startIndex, int endIndex)
        {
            return strings.Skip(startIndex).TakeWhile((x, index) => string.IsNullOrEmpty(x) && index <= endIndex).Count() > 0;
        }

    }