如果元素中包含特定文本,则从列表中删除元素

时间:2014-05-09 17:15:35

标签: c# visual-studio-2012 arraylist

我有一个C#方法,在其中我在列表中查找某些文本username,其中元素的格式为username + datetime,如果文本的任何部分与列表中的元素匹配,那么整个必须从列表中删除元素

添加到c# List

的方法
string active_user = model.UserName.ToString();
string datetime = "(" + DateTime.Now + ")";
List<string> activeUsers = new List<string>();

if (activeUsers.Any(str => str.Contains(active_user)))
{
    //do nothing
}
else
{
    activeUsers.Add(active_user+datetime);
}

现在我想要一个删除元素的方法,如果它匹配用户名或元素的任何部分,如

if (activeUsers.Contains(active_user))
{
    activeUsers.Remove(active_user);
}

4 个答案:

答案 0 :(得分:5)

您可以执行类似

的操作
activeUsers.RemoveAll(u => u.Contains(active_user));

这将匹配并移除包含activeUser中文字的active_user的所有元素。

答案 1 :(得分:4)

虽然其他答案都是正确的,但您应该注意他们会删除所有匹配项。例如,active_user = "John"将删除&#34; John&#34;,&#34; John123&#34;,&#34; OtherJohn&#34;等

您可以使用正则表达式进行测试,或者如果用户名没有括号,请执行以下测试:

string comp = active_user + "(";     // The ( is the start of the date part
activeUsers.RemoveAll(u => u.StartsWith(comp));

另请注意,这是区分大小写的。

答案 2 :(得分:1)

var user = activeUsers.FirstOrDefault(au => au.Contains(active_user);

if(user != null)
    activeUsers.Remove(user);

如果您只想删除第一场比赛,请执行以下操作:

var users = activeUsers.Where(au => au.Contains(active_user);

foreach(var user in users)
    activeUsers.Remove(user);

或者更简单地说,Eric回答了RemoveAll方法。

答案 3 :(得分:0)

如果我想从列表中删除数字字符串值列表项

 List<ModelName> ModelList = new List<ModelName>();

 var regex = new Regex(@"\d");

 foreach(var item in ModelList.ToList())
                {
                    if (regex.IsMatch(item.PropertyName))
                    {
                        ModelList.RemoveAll(t => t.PropertyName== item.PropertyName);//Or
                        ModelList.RemoveAll(t => t.PropertyName.Contains(item.PropertyName));//Or You Can Use Contains Method
                    }
                }

 return ModelList;

这将从列表中删除所有具有数值作为字符串的项目,并且仅返回列表项中的字符串