Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从阵列列表中删除阵列_C#_List - Fatal编程技术网

C# 从阵列列表中删除阵列

C# 从阵列列表中删除阵列,c#,list,C#,List,我有一个xml文件,希望从中删除任何行。因此,我将xml文件的每一行分配给一个列表: List<string[]> lines = new List<string[]>(); List<string> clmns = new List<string>();//each row is written to clmns ... lines.Add(clmns.ToArray()); 假设我想删除数组中包含5的行。我怎样才能做到 我想我可以使用line

我有一个xml文件,希望从中删除任何行。因此,我将xml文件的每一行分配给一个列表:

List<string[]> lines = new List<string[]>();
List<string> clmns = new List<string>();//each row is written to clmns
...
lines.Add(clmns.ToArray());
假设我想删除数组中包含5的行。我怎样才能做到


我想我可以使用lines.RemoveAt1删除数组。但是,我找不到一种方法来查找包含搜索字符串的数组的索引。

您已经非常接近了。数组只是一个对象,因此以下操作将起作用:

lines.Remove(lines.First(a => a.Contains("5")));
这将获取集合中具有5的第一个数组,并返回要删除的数组对象,然后该数组对象将删除它

要删除所有这些文件,请执行以下操作:

lines.RemoveAll(a => a.Contains("5"));

您需要循环到数组列表并手动删除它。假设您只想删除前5个

foreach(var line in lines)
{
 if(line.Contains("5"))
 {
  lines.Remove(line);
  break;
 }
}
方法可以在这里帮助您

int index = lines.FindIndex(x=> x.Contains("5"));
if(index >= 0)
{
   lines.RemoveAt(index);
}

太好了!它起作用了。非常感谢。我应该学习LINQ来学习这些语句吗?@Siha:FYI:lines。如果没有找到带5的行,First将抛出异常。如果不需要这样做,请改用lines.FirstOrDefault,并在将结果传递给lines.RemoveA之前检查其结果。谢谢。谢谢你的第一条评论,这会让你很难受:。至于学习LINQ,是和否。我使用了LINQ扩展方法,并将lambda表达式传递给它。学习这些将带您走一条与学习LINQ本身不同的道路,因为它基本上是一种语言,类似于SQL。最后,学习这两种方法都会大有裨益@Siha,如果你真的开始研究LINQ的话,作为旁白,我给你的例子使用LINQ来处理对象。LINQ的所有版本的语法都是相同的,但它们是不同的。对于一般用途,扩展就足够了:这将引发异常,因为您正在修改循环中的foreach枚举。@itsme86不,不会。如果我再迭代一次,它就会出现。有趣的是,如果你向后迭代,它不会崩溃。除此之外,我不确定这对使用.First、.FirstOrDefault或类似的东西有什么好处。演示如何在不使用LINQ的情况下实现它。特别是对于那些新加入C的人,他们还没有解决LINQ的问题。谢谢你的回答!非常感谢。这也是一个有用的!
int index = lines.FindIndex(x=> x.Contains("5"));
if(index >= 0)
{
   lines.RemoveAt(index);
}