代码之家  ›  专栏  ›  技术社区  ›  Sinaesthetic

C:是否有方法确定元素范围是否为空?

  •  4
  • Sinaesthetic  · 技术社区  · 14 年前

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

    4 回复  |  直到 14 年前
        1
  •  5
  •   Kirk Woll    14 年前
    array.Skip(startIndex).Take(count).All(x => string.IsNullOrEmpty(x));
    

    因此,如果您试图检查元素0-3:

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

    为了清楚起见,我离开了 Skip 在那里。

    编辑: 使它 Take(4) 而不是另一个答案中乔纳森的评论中的3个(现在我的答案中是格法的评论)。;)

    编辑2: 根据下面的评论,OP想看看 任何 匹配的元素:

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

    如此改变 All Any .

        2
  •  3
  •   Rex M    14 年前
    bool is0to3empty = myArrayOfString.Skip(0).Take(4).All(i => string.IsNullOrEmpty(i));
    
        3
  •  2
  •   Guffa    14 年前

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

    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);
    
        4
  •  1
  •   Aliostad    14 年前

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

        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;
            }
    
        }