2014-01-30 55 views
2

我有三個類別:如何設置一個空的ICollection C#

private ICollection<FPTAssetClassAsset> wrassets; 
private ICollection<FPTFundAsset> wrfunds; 
private ICollection<FPTManagedStrategyAsset> wrstrats; 

如果foreach循環返回0對象,集合沒有得到設置,因此無效。 當我將這個icollection(聯盟)添加到另一個icollection它失敗:「值不能爲空」,因爲icollection爲空,而不是空。我怎樣才能將這個集合設爲空?

循環:

public void GetWrapperAssets(FPT fpt) 
    { 
     foreach (var w in fpt.CouttsPositionSection.Wrappers 
     .Union(fpt.StandAloneSection.Wrappers) 
     .Union(fpt.BespokePropositionSection.Wrappers) 
     .Union(fpt.NonCouttsPositionSection.Wrappers) 
     ) 
     { 
      foreach (var a in w.UnderlyingAssets.OfType<FPTManagedStrategyAsset>()) 
      { 
       wrstrats.Add(a); 
      } 
      foreach (var a in w.UnderlyingAssets.OfType<FPTAssetClassAsset>()) 
      { 
       wrassets.Add(a); 
      } 
      foreach (var a in w.UnderlyingAssets.OfType<FPTFundAsset>()) 
      { 
       wrfunds.Add(a); 
      } 
     } 
    } 
+0

我們展示你的循環。另外,實例化集合在哪裏? –

+0

初始化每一個=新集合<...>() – n8wrl

+1

_「如果一個foreach循環返回0對象,集合不會被設置,因此爲空。」_我仍然沒有看到任何代碼實例化wrstrats,wrassets,所以即使你的循環執行,對'.Add'的調用仍然會拋出異常。 –

回答

2

好了,你可以隨時加入之前檢查null。或者你也可以把它變成一個屬性:

private ICollection<FPTAssetClassAsset> wrassets 
{ 
    get { return _wrassets == null ? new List<FPTAssetClassAsset>() : _wrassets; } 
} 
private ICollection<FPTAssetClassAsset> _wrassets; 
4

foreach循環之前初始化你的收藏品,這樣,他們將永遠有一個值:

private ICollection<FPTAssetClassAsset> wrassets = new Collection<FPTAssetClassAsset>(); 
private ICollection<FPTFundAsset> wrfunds = new Collection<FPTFundAsset>(); 
private ICollection<FPTManagedStrategyAsset> wrstrats = new Collection<FPTManagedStrategyAsset>(); 
+1

謝謝,我無法初始化一個新的集合,因爲它是一個抽象類,所以使用List來代替,並且發揮了魅力。 –