使用 lambda 表达式将匹配词添加到列表中

Add matching word into list with lambda expression

如何使用单行代码将所有必需的单词添加到列表中?我想使用 lambda 表达式,但不知道如何使用它?也欢迎其他解决方案。当针对 NET 2.0 时,lambda 可用,但 LINQ 不可用。那么是否可以避免 LINQ dll 添加?

List<string> lstStr = new List<string>();
string[] objStr = new string[] { "Software", "Development", "department", "store", "Marketing" };
foreach (string objLcl in objStr)
{
    if (objLcl.Contains("o"))
    {
        lstStr.Add(objLcl);
    }
}

如果要添加包含的所有字符串"o":

lstStr.AddRange(objStr.Where(o => o.Contains("o")));

这应该适合你。假设您想要包含 "o" 且不等于 "o" 的条目。如果不是,您必须将 Contains 更改为 Equals 并获得预期的结果。

string[] objStr = new string[] { "Software", "Development", "department", "store", "Marketing" };
var lstStr = objStr.Where(x => x.Contains("o")).ToList();

查看 101 LINQ-Samples 了解更多信息。

您可以使用 LINQ Where() 方法,例如

lstStr  = objstr.Where(s => s.Contains("o")).ToList();

根据评论,如果你想进行不区分大小写的搜索,你将不得不使用 indexOf() 方法,你可以在其中传递 StringComparison 枚举值,因为 Contains() 没有可以采用 StringComparison 枚举值的重载。

lstStr  = objstr.Where(s => s.IndexOf("o", StringComparison.OrdinalIgnoreCase) >= 0)
                .ToList();

同样,如果您想使用 LINQ,那么请使用正常的 foreach 循环控制,例如

foreach(var s in objstr)
{
  if(s.IndexOf("o", StringComparison.OrdinalIgnoreCase) >= 0)
      lstStr.Add(s);  
}

下面是 Linq

string[] objStr = new string[] { "Software", "Development", "department", "store", "Marketing" };
List<string> lstStr = objStr.Where(objLcl => objLcl.Contains("o")).ToList();

为避免额外的内存分配,可以从源集合中删除项目(无 LINQ):

var lstStr = new List<string> { "Software", "Development", "department", "store", "Marketing" };

lstStr.RemoveAll(s => !s.Contains("o"));

现在,通过更多的研发,我找到了一个解决方案,而且非常简单。

lstStr.AddRange(Array.FindAll(objStr, x => x.Contains("o")));