C#如何更优地替换字符串占位符为范围数字生成List<string>
解答
完全可以用LINQ一行代码实现完全相同的效果,写法比手动初始化集合再循环Add简洁很多。
一行LINQ实现代码
string input = "Hello_World_{0}"; List<string> lst = Enumerable.Range(1, 10).Select(v => string.Format(input, v)).ToList();
实现逻辑说明
- 首先通过
Enumerable.Range(1, 10)直接生成从1到10的连续整数序列,和原循环的遍历范围完全一致 - 调用
Select方法做投影:对序列里的每个整数,用string.Format把模板字符串里的{0}占位符替换成当前数字 - 最后调用
ToList()方法,把投影得到的字符串序列直接转为List<string>集合,最终生成的集合内容和原循环写法没有任何差异。
可选优化方案
如果是使用C# 8及以上版本、且对性能有较高要求(比如单次生成万级以上数量的字符串),可以用string.Create结合栈分配内存的方式减少字符串格式化的开销,写法如下:
string input = "Hello_World_{0}"; List<string> lst = Enumerable.Range(1, 10) .Select(v => string.Create(null, stackalloc char[64], $"Hello_World_{v}")) .ToList();
注意:普通业务场景下(生成元素数量在千级以内),这个优化带来的性能差异几乎感知不到,优先选择可读性更好的
string.Format写法即可,没必要为了微幅性能牺牲代码可维护性。
内容的提问来源于stack exchange,提问作者usmanharoon
相关产品推荐
相关产品推荐

