C# 从列表中删除包含特定文本的元素

C# 从列表中删除包含特定文本的元素,c#,visual-studio-2012,arraylist,C#,Visual Studio 2012,Arraylist,我有一个C#方法,我在一个元素格式为username+datetime的列表中查找某些文本,比如username,如果文本的任何部分与列表中的元素匹配,则必须从列表中删除整个元素 添加到c#列表中的方法 string active_user = model.UserName.ToString(); string datetime = "(" + DateTime.Now + ")"; List<string> activeUsers = new List<string>(

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

添加到
c#列表中的方法

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);
}
如果您只想删除第一个匹配项,请执行以下操作:

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

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

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

您可以执行以下操作

if (activeUsers.Contains(active_user))
{
    activeUsers.Remove(active_user);
}
activeUsers.RemoveAll(u => u.Contains(active_user));

这将匹配并删除
activeUser
中包含
active\u user
中文本的所有元素。当其他答案正确时,您应该注意,它们将删除所有匹配项。例如,
active\u user=“John”
将删除“John”、“John123”、“OtherJohn”等

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

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

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

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

 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;
List ModelList=new List();
var regex=new regex(@“\d”);
foreach(ModelList.ToList()中的var项)
{
if(regex.IsMatch(item.PropertyName))
{
ModelList.RemoveAll(t=>t.PropertyName==item.PropertyName);//或
ModelList.RemoveAll(t=>t.PropertyName.Contains(item.PropertyName));//或者您可以使用Contains方法
}
}
返回模型列表;

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

对于我的使用来说似乎很完美如果我想检查更多条件怎么办?@Si8只需使用&&<代码>activeUsers.RemoveAll(u=>u.StartsWith(comp)&&somethingelse&&somethingels2)谢谢。我把我的问题贴在这里,如果你愿意帮忙,请。。。
 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;