如何从列表中删除项目内容?

时间:2015-08-22 13:08:42

标签: c#

我正在使用字符串分隔机制来处理逗号分隔的字符串,并使用foreach循环来循环每个项目,所以如果我想删除一个项目,我该怎么办?

string lyrsct = drow1["lyricist"].ToString();
var delimiters = new[] {','}; 
var lyrsct1 = lyrsct.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
foreach (var item in lyrsct1)
{
    if()
        {
         .........i need to remove from here.....
        }                 
}

我想删除if循环中的项目。

6 个答案:

答案 0 :(得分:0)

foreach (var item in lyrsct1)    
{    
      if (//item's condition)
      {
         lyrsct1.Remove(item );        
      }                   
}

答案 1 :(得分:0)

这是我的解决方案,因为你有一些行动的条件。

我从列表中删除'7'。

    var condition = "7";
    string lists = "1,2,3,4,5,6,7,7,8,9";
    var delimiter = new[] {','};
    var splitlist = lists.Split(delimiter,StringSplitOptions.RemoveEmptyEntries).ToList();
    var newList = new List<string>();

   foreach (var item in splitlist.Where(x => !x.Equals(condition)))
        {
            newList.Add(item);
        }
   OR

   var newList = splitlist.Where(x => !x.Equals(condition)).ToList();

答案 2 :(得分:0)

试试这个

var result = new List<string>();
foreach (var item in lyrsct1.Where(x => !x.Contains("example text"))) // you can also compare values here instead of contains or !Contains (not contains)
{    
    result.Add(item);
}

OR

var lyrsct1 = lyrsct.Split(delimiters, StringSplitOptions.RemoveEmptyEntries)
              .Where(x => !x.Contains("example text")).ToList();

答案 3 :(得分:0)

您无法修改数组。您必须将lyrsct1转换为列表。

当你迭代它时,你也无法修改foreach循环中的集合。所以请改用循环

        string lyrsct = drow1["lyricist"].ToString();
        var delimiters = new[] { ',' };
        var lyrsct1 = lyrsct.Split(delimiters, StringSplitOptions.RemoveEmptyEntries).ToList(); // List is modifiable.
        for (int i = 0; i < lyrsct1.Length; i++)
        {
            var item = lyrsct1[i];
            if ()
            { 
                int indexToRemove = something; // index of item that should be removed
                lyrsct1.Remove(indexToRemove);
                if(indexToRemove <= i) i--; // correct the indexing
            }
        }

from this answer:

  

foreach语句用于遍历集合以获取   您想要的信息,但不能用于添加或删除   来自源集合的项目,以避免不可预测的副作用。   如果您需要在源集合中添加或删除项目,请使用   for loop。

另请查看:Collection was modified. enumeration operation may not execute

答案 4 :(得分:0)

过滤掉一些元素的最简单方法是使用.Where LINQ方法。我假设你想得到一个字符串数组:

string lyrsct = drow1["lyricist"].ToString();
var delimiters = new[] {','}; 
var lyrsct1 = lyrsct.Split(delimiters, StringSplitOptions.RemoveEmptyEntries)
    .Where(item => !condition(item).ToArray();

答案 5 :(得分:0)

您可以创建仅包含已过滤元素的新List

string lyrsct = drow1["lyricist"].ToString();
var delimiters = new[] {','}; 
var lyrsct1 = lyrsct.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);

List<string> newList = new List<string>(lyrcst1.Where(elem => !predicate(elem)));

检查构建器IEnumerable<T>https://msdn.microsoft.com/en-us/library/fkbw11z0.aspx