2011-06-13 94 views
2

我有一个类如下:如何将指定数量的列表元素添加到ILIST?

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); 

回答

2

当然,你可以使用一个构造函数,将初始化列表:

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; 
} 
+0

+1,用于异常处理和范围。 – 2011-06-13 19:25:46

1

肯定的:

public class ABC { 
public IList<TextFillerDetail> TextFillerDetails   
{ get { return _textfillerDetails; } }   
    public ABC(int capacity) 
    { 
    _textfillerDetails = new List<TextFiller>(capacity); 
    } 
private List<TextFiller> _textfillerDetails; 
} 
+1

这将分配一个适当大小的列表,但不会构造实际的TextFiller元素。这意味着像“新ABC(5)[0] .ToString()”会抛出一个空引用异常。这个答案是有效率的,因为它还没有分配列表项目,但可能不是提交者的内容。 – 2011-06-13 19:26:51

3

你可以将其添加为构造函数的参数:

public class ABC() 
{ 
    public ABC(int count) 
    { 
     for (int i = 0; i < count; i++) 
     { 
      TextDetails.Add(new TextDetail()); 
     } 
    } 

    // Stuff 
} 
+0

+1:简单,干净,易于阅读,忽略无效数字为'-2' – BrunoLM 2011-06-13 19:30:46

0

有几种方法:

使用初始化程序;这样可以节省一点点的打字:

var ans = new ABC{ 
    new TextDetail(), 
    new TextDetail(), 
    new TextDetail(), 
    new TextDetail(), 
    new TextDetail(), 
} 

更好的主意:使用LINQ重复初始化拉姆达:

var ans = Enumerable.Repeat(0,5).Select(x=>new TextDetail()).ToList(); 
0

你可以把在一个重载的构造函数的项目数增加作为参数。

但你为什么需要这样做?难道你不能只在需要时将TextDetail对象添加到列表中吗?

0

就为了这个任务,是的,

private List<TextFiller> _textfillerDetails = new List<TextFiller>(); 
public ABC(int capacity) 
    { 
    for(int index = 0; index < capacity; index ++) 
     _textfillerDetails.Add(new TextDetail()); 
    } 
0

您可以使用一个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(); 
    } 
} 
0

考虑使用也

的IEnumerable或ICollection的或IQueryable的对象。

Ray Akkanson

相关问题