如何将指定数量的列表元素添加到ILIST
本文关键字:列表元素 添加 ILIST | 更新日期: 2023-09-27 17:58:59
我有一个类如下:
public class ABC {
public IList<TextFillerDetail> TextFillerDetails
{ get { return _textfillerDetails; } }
private List<TextFiller> _textfillerDetails = new List<TextFiller>();
}
我实例化了这个类,并向它添加了一些TextDetails:
var ans = new ABC();
ans.TextDetails.Add(new TextDetail());
ans.TextDetails.Add(new TextDetail());
ans.TextDetails.Add(new TextDetail());
ans.TextDetails.Add(new TextDetail());
有没有一种方法可以通过向类中添加一些代码(例如不同类型的构造函数)一步到位。例如,通过传递数字5来请求添加五个元素?
var ans = new ABC(5);
您可以将其添加为构造函数参数:
public class ABC()
{
public ABC(int count)
{
for (int i = 0; i < count; i++)
{
TextDetails.Add(new TextDetail());
}
}
// Stuff
}
当然,您可以使用一个构造函数来初始化列表:
public class ABC
{
public ABC(int count)
{
if (count < 1)
{
throw new ArgumentException("count must be a positive number", "count");
}
_textfillerDetails = Enumerable
.Range(1, count)
.Select(x => new TextDetail())
.ToList();
}
public IList<TextFillerDetail> TextFillerDetails { get { return _textfillerDetails; } }
private List<TextFiller> _textfillerDetails;
}
确定:
public class ABC {
public IList<TextFillerDetail> TextFillerDetails
{ get { return _textfillerDetails; } }
public ABC(int capacity)
{
_textfillerDetails = new List<TextFiller>(capacity);
}
private List<TextFiller> _textfillerDetails;
}
有几种方法:
使用初始值设定项;它节省了一点打字:
var ans = new ABC{
new TextDetail(),
new TextDetail(),
new TextDetail(),
new TextDetail(),
new TextDetail(),
}
更好的想法:使用Linq重复初始化lambda:
var ans = Enumerable.Repeat(0,5).Select(x=>new TextDetail()).ToList();
您可以放入一个重载构造函数,该构造函数将要添加的项数作为参数。
但你为什么要这么做?难道你不能根据需要将TextDetail
对象添加到你的列表中吗?
仅针对此任务,是,
private List<TextFiller> _textfillerDetails = new List<TextFiller>();
public ABC(int capacity)
{
for(int index = 0; index < capacity; index ++)
_textfillerDetails.Add(new TextDetail());
}
您可以使用for循环或linq:
public class ABC
{
public IList<TextFillerDetail> TextFillerDetails { get; private set }
public ABC() : this(0)
{
}
public ABC(int count)
{
TextFIllerDetails = Enumerable.Range(0,count)
.Select(x => new TextFillerDetail())
.ToList();
}
}
考虑同时使用
IEnumerable、ICollection或IQueryable对象。
Ray Akkanson