如何简化多次重复实例化Border对象的数组声明?
简化重复实例化同一类型对象的数组声明方式
现有如下代码:
Border[] _headerBorder = new Border[] { new Border{}, new Border{}, new Border{}, new Border{}, new Border{}, new Border{}, new Border{}, new Border{}, new Border{}, new Border{}, new Border{}, new Border{}, new Border{}, new Border{}, new Border{}, new Border{}, new Border{}, new Border{}, new Border{}, new Border{} };请问如何简化这类需要重复实例化同一类型对象的数组声明方式?
针对这类场景,有几种简洁的实现方式,可根据实际需求选择:
1. 用LINQ的Enumerable.Repeat快速生成(注意引用类型的实例复用问题)
如果Border是值类型,或者可以接受数组所有元素共享同一个引用实例,直接用Repeat生成序列再转数组:
using System.Linq; // 需引入LINQ命名空间 Border[] _headerBorder = Enumerable.Repeat(new Border(), 20).ToArray();
⚠️ 注意:如果Border是引用类型,上述代码会让数组里的20个元素指向同一个对象实例,修改其中一个会同步影响所有元素。
2. 用Enumerable.Range+投影生成独立实例
如果需要每个数组元素都是全新的Border对象,用Range生成索引范围,再通过Select每次创建新实例:
using System.Linq; Border[] _headerBorder = Enumerable.Range(0, 20) .Select(_ => new Border()) .ToArray();
这种方式会循环20次,每次生成独立的Border实例,避免引用共享的问题。
3. 传统for循环初始化(无LINQ依赖)
如果不想引入LINQ依赖,用普通for循环手动初始化数组也很直观:
int itemCount = 20; Border[] _headerBorder = new Border[itemCount]; for (int i = 0; i < itemCount; i++) { _headerBorder[i] = new Border(); }
这种写法兼容性好,不需要额外引用,适合轻量场景。
内容的提问来源于stack exchange,提问作者Alfred E. Neumann
相关产品推荐
相关产品推荐

