LINQlambda表达式替换字符串中的多个字符?是否可以编写一个lambda表达式来遍历对象数组并替换其中一个属性中所有出现的“X”、“Y”和“Z”?例如returnquery.Select(x=>{x.SomePropertyName=x.SomePropertyName.Trim().Replace('',"_");returnx;}).ToList();出于某种原因,当我需要替换多个字符时,上述查询不会't替换单个字符。谢谢我经常使用string.Split和string.Join的组合,当我想用??一个其他字符替换几个字符之一时:char[]unwanted=new[]{'X','Y','Z'};query=query.Select(x=>{x.SomePropertyName=string.Join("_",x.SomePropertyName.Split(unwanted));returnx;});这将使用'_'将任何'X'、'Y'或'Z'替换为'_'。您可以将其与您选择的循环结构结合使用。如评论中所述,在这种情况下,使用Select不会真正添加任何价值。一个普通的foreach循环就可以完成这项工作,甚至可以生成更紧凑的代码:char[]unwanted=new[]{'X','Y','Z'};foreach(varxinquery){x.SomePropertyName=string.Join("_",x.SomePropertyName.Split(unwanted));};如果要使用LINQ,可以像这样使用Select、ToArray和String(char[])构造函数:varresult=query.ToList();foreach(varxinresult){x.SomeProperty=newstring(x.SomeProperty.Select(c=>(c=='X'||...||c=='')?'_':c).ToArray());请注意,LINQ不是用于产生副作用,而是用于从现有枚举创建新枚举。所以这里使用foreach循环更好。但为什么不进行一系列简单的替换调用呢?varresult=query.ToList();foreach(varxinresult){x.SomeProperty=x.SomeProperty.Replace('X','_').Replace('Y','_').Replace('Z','_').Replace('','_');或者您是否试图用一系列字符替换单个字符?然后使用带有两个字符串的String.Replace重载:varresult=query.ToList();foreach(varxinresult){x.SomeProperty=x.SomeProperty.Replace("","ABC");如果你想使用正则表达式,你可以这样做:query.Select(x=>{x.SomePropertyName=Regex.Replace(x.SomePropertyName,@"[XYZs]","_");returnx;})虽然您请求了LINQ,LINQ的这种(滥用)使用依赖于副作用并使代码混乱。使用对象数组(您的问题就是这种情况)的另一种方法是使用Array.ForEach方法://使用FredrikM?rk的方法Array.ForEach(query,x=>x.SomePropertyName=string.Join("_",x.SomePropertyName.Split(不需要的)));//使用正则表达式Array.ForEach(query,x=>x.SomePropertyName=Regex.Replace(x.SomePropertyName,"[XYZ]","_",RegexOptions.IgnoreCase));当然使用正则表达式需要一些知识。请注意在正则表达式中具有特殊含义的元字符的使用。您可以使用Regex.Escape方法来清理字符。遍历字符串中的每个字符并在必要时替换它。以上就是C#学习教程:LINQlambdaexpressiontoreplacemultiplecharactersinastring?分享的所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——varxyz=newHashSet(new[]{'X','Y','Z'});字符替换='_';varresults=query.Select(x=>{varvalue=x.SomePropertyName.Trim().Select(y=>xyz.Contains(y)?replacement:y).??ToArray();x.SomePropertyName=newstring(值);返回x;}).ToList();本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
