Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# 只保留列表中只有字母的元素_C#_Linq - Fatal编程技术网

C# 只保留列表中只有字母的元素

C# 只保留列表中只有字母的元素,c#,linq,C#,Linq,我有一个列表,其中包含一些非字母字符的元素。例如,我可能有#232353完全不包含任何字母,或者我可能有SomeText,SomeOtherText,并且该元素包含一个逗号,它也不是字母。如何使用linq删除这些元素?大概是这样的: MyList = MyList.Where(...) 谢谢。您可以使用检查字符串中的所有字符是否都是字母: MyList = MyList.Where(s => s.All(Char.IsLetter)).ToList(); 由于这在列表中因此,您可以使用

我有一个
列表
,其中包含一些非字母字符的元素。例如,我可能有
#232353
完全不包含任何字母,或者我可能有
SomeText,SomeOtherText
,并且该元素包含一个逗号,它也不是字母。如何使用linq删除这些元素?大概是这样的:

MyList = MyList.Where(...)
谢谢。

您可以使用检查字符串中的所有字符是否都是字母:

MyList = MyList.Where(s => s.All(Char.IsLetter)).ToList();

由于这在
列表中
因此,您可以使用
RemoveAll
方法删除与特定谓词匹配的所有值

MyList.RemoveAll(s => s.Any(c => !Char.IsLetter(c)));

好的,谢谢:它看起来不错,但它说它不能将IEnumerable转换为IEnumerableList@frenchie抱歉,错过了这件事-只需添加
ToList()
call以从过滤字符串创建新的
List
,您的答案和Jared的答案之间的“幕后”区别是什么?@frenchie如果您需要在同一列表中保留过滤字符串,然后最好将它们从列表中删除,而不是创建新的列表。若只需要枚举结果,则无需修改原始列表或创建新列表。但如果您需要将结果列为
列表
,请使用Jared的选项查看和。学会把你的问题分解成更小的部分,你会发现所有的问题都得到了回答。您也可以使用列表的
FindAll
方法,但这将创建新的结果列表,正如我的回答所做的那样,“因为这在列表上”?@frenchie这意味着可以在不创建新集合的情况下进行删除。
列表
类型具有直接修改集合的Add/Remove方法。另一方面,像
IEnumerable
这样的类型具有扩展方法,这些方法类似于删除,但会创建一个新集合。这意味着您将使用类似于
e=e.Where(x=>…)
的语法。好的,在一种情况下,我们将得到两个列表,其中一个被重新分配给原始引用,另一个被垃圾收集,而对于属于列表类型一部分的方法,我们只保留一个列表。“大概是这样吗?”弗兰奇说得对