2011-06-13 95 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