使用LINQ从String数组中删除“NULL行”

如何使用LINQ从String数组中删除“NULL行”?

采用这种结构( String[,] ):

 "Hello", "World", "Foo", "Bar" null, null, null, null null, null, null, null "Hello", "World", "Foo", "Bar" "Hello", "World", "Foo", "Bar" null, null, "Foo", "Bar" 

应删除第一行之后的两行。 结构中的最后一行不应该。

例如,如果列表中有数组,则可以执行以下操作:

  IList l = new List { new []{ "Hello", "World", "Foo", "Bar" }, new string[]{ null, null, null, null }, new string[] { null, null, null, null }, new [] { "Hello", "World", "Foo", "Bar" }, new [] {null, null, "Foo", "Bar" } }; var newList = l.Where(a => a.Any(e => e != null)); 

(更新)

我不认为Linq会为你提供多维数组的帮助。 这是一个使用普通旧for循环的解决方案……

  string[,] arr = new string[,] { { "Hello", "World", "Foo", "Bar" }, { null, null, null, null }, { null, null, null, null }, { "Hello", "World", "Foo", "Bar" }, {null, null, "Foo", "Bar" } }; IList l = new List(); for (int i = 0; i < arr.GetLength(0); i++) { string[] aux = new string[arr.GetLength(1)]; bool isNull = true; for (int j = 0; j < arr.GetLength(1); j++) { aux[j] = arr[i, j]; isNull &= (aux[j] == null); } if (!isNull) l.Add(aux); } 

这导致List

不可能这样做,数组是固定大小,你需要一个新的数组,列表或集合可以用这种方式删除。

数组不能。 你需要在那些行中有东西。

任何调用类似toArray()的解决方案都在构造一个你特别要求不会发生的数组。