Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.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# 使用lambda表达式将匹配词添加到列表中_C#_Lambda_.net 2.0 - Fatal编程技术网

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

C# 使用lambda表达式将匹配词添加到列表中,c#,lambda,.net-2.0,C#,Lambda,.net 2.0,如何使用单行代码将所有必需的单词添加到列表中?我想使用lambda表达式,但不知道如何使用它?也欢迎其他解决办法。在Net2.0上,Lambda是可用的,但LINQ不是。那么有可能避免LINQ dll添加吗 List<string> lstStr = new List<string>(); string[] objStr = new string[] { "Software", "Development", "department", "store", "Marketin

如何使用单行代码将所有必需的单词添加到列表中?我想使用lambda表达式,但不知道如何使用它?也欢迎其他解决办法。在Net2.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的所有字符串:


这应该对你有用。假设您希望有包含o且不等于o的条目。如果不是,则必须将Contains更改为Equals并获得预期结果

string[] objStr = new string[] { "Software", "Development", "department", "store", "Marketing" };
var lstStr = objStr.Where(x => x.Contains("o")).ToList();
查看以获取更多信息。

您可以使用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();

为了避免额外的内存分配,可以从源集合中删除项no 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")));


您的示例将返回一个空集合。这就是你的意思吗?还是你的意思?结果应该是什么样的?目前它返回一个空集合,但我想你想要所有包含字符o的单词,不是吗?为什么你这么在乎一行?您应该首先确保代码按照预期工作,并且被很好地理解。然后看一些Linq教程。哦,实际上我做了一些研发,忘记了更改代码。如果你不能使用Linq,不要将Linq作为标记。似乎有点违反直觉。@不幸的是,这主要是因为发布的数组值存在拼写错误,而这些数组值现在不会做任何事情added@J.Steen,是的,但这是per OP发布的代码,其中数组值的大小写为小写如果我不想使用LINQ,那么?当在NET 2.0上瞄准时,lambda是可用的,但LINQ不是。那么有没有可能避免LINQ的加入呢?有时候我会有这样的感觉,我后面跟着一些寻求报复的人。拉胡尔的回答也是一样,后来得到了支持。真正地strange@J.Steen为什么呢?即使是作为其工作示例的代码OP也不会这样做?你想说OP错误地认为他的代码是有效的吗-^^@Steen好的,考虑到他的问题,你可能是对的:-当瞄准Net2.0时,Lambda是可用的,但LINQ不是。那么,有可能避免LINQ dll添加吗?当在NET2.0上定位时,lambda是可用的,但LINQ不是。所以,是否有可能避免LINQ dll add?但您直接将值添加到列表…?@cSharma或使用列表而不是数组。我从数据库中获取数据,其中需要按某些特定的字对行进行分类并存储在不同的表中。所以我想用更少的编码来实现这一点。
lstStr.AddRange(Array.FindAll(objStr, x => x.Contains("o")));