当前位置: 首页 > 编程语言 > C#

C#LearningTutorial-AppendingaStringinaLoopinanEfficientWayShare

时间:2023-04-10 17:39:40 C#

AppendingaStringinaLoopinanEfficientWay很长一段时间,我总是通过以下方式追加一个字符串。例如,如果我希望所有员工姓名都由某个符号分隔,在下面的示例中我已打开管道符号。stringfinal=string.Empty;foreach(EmployeeList中的员工emp){final+=emp.Name+"|";//如果我想用管道符号分隔它们}最后我创建了一个子字符串并删除了最后一个管道符号,因为它不是必需的final=final.Substring(0,final.length-1);有什么有效的方法可以做到这一点。我不想向最后一项添加管道符号并再次执行子字符串。使用string.Join()和Linq投影到Select()代替:finalString=string.Join("|",EmployeeList.Select(x=>x.Name));这种方法更好的三个原因:它更简洁和可读-它表达了意图,而不是你想要如何实现你的目标(在你的情况下在循环中连接字符串)。使用Linq的简单投影也有帮助。它由性能框架优化:在大多数情况下,string.Join()将在内部使用StringBuilder,因此您不会创建多个稍后将被引用并且必须被垃圾收集的字符串。另请参阅:不要在循环内连接字符串您不必担心特殊情况。string.Join()自动处理“最后一项”的情况,之后您不需要另一个分隔符,这再次简化了代码并使其不易出错。你应该加入你的字符串。示例(从MSDN借用):usingSystem;classSample{publicstaticvoidMain(){String[]val={"apple","orange","grape","pear"};字符串sep=",";字符串结果;Console.WriteLine("sep='{0}'",sep);Console.WriteLine("val[]={{'{0}''{1}''{2}''{3}'}}",val[0],val[1],val[2],值[3]);结果=String.Join(sep,val,1,2);Console.WriteLine("String.Join(sep,val,1,2)='{0}'",结果);我喜欢在linq中使用聚合函数,例如:string[]words={"one","two","three"};varres=words.Aggregate((current,next)=>current+","+next);对于最后的管道问题,只需将最后一个附加保留在循环之外intsize=EmployeeList.length()for(inti=0;iStringBuilder可能是此类构建的更好选择。以上是C#学习教程:Append以高效的方式在循环中分享字符串的全部内容,如果对大家有用,需要了解更多C#学习教程,希望大家多多关注---本文收集自网络,非原创代表立场,如涉及侵权,请点右联系管理员删除,如需转载请注明出处: