创建列表后没有使用方法,也没有使用数组或新的List (array),是否有语法可以使此代码更简洁?List<CustomObject> list = new List<CustomObject>{ new CustomObject(), new CustomObject(), new CustomObject(), new CustomObject(), new CustomObject(), new CustomObject(), new CustomObject(), new CustomObject(), new CustomObject(), new CustomObject()};初始化时,有没有更简洁的方式编写此代码?就像是...List<CustomObject> list = new List<CustomObject> { new CustomObject() * 10 }; 最佳答案 您可以尝试使用Enumerable.Range:var list = Enumerable.Range(0, 10) .Select(i => new CustomObject()) .ToList();更新资料肯定地使用上面的代码要慢于使用已经使用的集合初始化器,正如mjwills在他的评论中正确指出的那样。为了衡量此方法比集合初始化方法慢多少,我设置了以下测试用例,并使用了BenchmarkDotNet库public class CustomObject{}public class ListInitiator{ [Benchmark] public List<CustomObject> InitializeList() { return new List<CustomObject> { new CustomObject(), new CustomObject(), new CustomObject(), new CustomObject(), new CustomObject(), new CustomObject(), new CustomObject(), new CustomObject(), new CustomObject(), new CustomObject() }; } [Benchmark] public List<CustomObject> InitializeListUsingEnumerableRange() { return Enumerable.Range(0, 10) .Select(i => new CustomObject()) .ToList(); }}class Program{ static void Main(string[] args) { var summary = BenchmarkRunner.Run<ListInitiator>(); }}您可以在下面找到测试结果Processor=Intel Core i5 CPU 760 2.80GHz (Nehalem), ProcessorCount=4Frequency=2732435 Hz, Resolution=365.9739 ns, Timer=TSC [Host] : .NET Framework 4.7 (CLR 4.0.30319.42000), 32bit LegacyJIT-v4.7.2110.0 DefaultJob : .NET Framework 4.7 (CLR 4.0.30319.42000), 32bit LegacyJIT-v4.7.2110.0 | Method | Mean | Error | StdDev | |----------------------------------- |---------:|---------:|---------:| | InitializeList | 319.6 ns | 3.904 ns | 3.260 ns | | InitializeListUsingEnumerableRange | 642.4 ns | 9.139 ns | 8.549 ns |显然,如果您使用Enumerable.Range方法,则需要的时间比使用集合初始化方法的时间还要多。但是,在两种情况下,您的时间都大大低于1ms。基于后一个事实,您无法确定这是否对性能造成了影响。在某些系统中,这种差异会极大地影响性能。另一方面,有些系统不会以任何方式引起这种差异。关于c# - 初始化和填充新List <>的更干净方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46629377/
10-12 14:46