如何为C#中string[]数组的所有元素统一赋值(非循环方法)
替代循环给数组所有元素赋值的方法
当然有啦!除了手动写循环,C#里还有几种更简洁的方式能完成这个需求,我给你整理几个常用的方案:
1. 使用 Array.Fill(推荐,C# 8.0+/.NET Core 3.0+ 可用)
这是最直接的官方方法,一行代码就能搞定,内部其实封装了循环逻辑,但不用你自己写:
Array.Fill(MyStr, "Something");
这个方法会直接修改原数组的每一个元素,完美契合你的需求——不用创建新数组,直接更新现有数组的所有值。
2. 使用 LINQ 的 Enumerable.Repeat 创建新数组
如果你不需要保留原数组的引用(比如原数组没有被其他地方绑定),可以用LINQ快速生成一个全是目标字符串的新数组,然后替换掉原来的变量:
MyStr = Enumerable.Repeat("Something", 100).ToArray();
⚠️ 注意:这个方法会创建一个全新的数组对象,原来的数组会被垃圾回收。如果你的MyStr还被其他代码引用,这种方式会导致那些引用指向旧数组,而不是更新后的新数组,这点要留意。
3. 使用 Array.ForEach(带 ref 参数,C# 7.2+ 可用)
虽然本质还是循环,但写法更简洁,而且能直接修改原数组元素:
Array.ForEach(MyStr, (ref string s) => s = "Something");
这里的ref关键字很关键,因为字符串是引用类型,但默认的Array.ForEach是值传递(传递的是引用的副本),不加ref的话无法修改原数组的元素引用,所以必须加上ref才能生效。
补充说明
如果你的项目基于老版本的.NET框架(比如.NET Framework 4.x),Array.Fill可能无法使用,这时候LINQ或者带ref的Array.ForEach就是更好的选择。另外,因为string是不可变的引用类型,这些方法都是直接替换数组中每个元素的引用,不会有意外的副作用。
内容的提问来源于stack exchange,提问作者Fakd 'Ap
相关产品推荐
相关产品推荐

