2013-08-16 19 views
2

我有這個代碼(這只是一個片段):未將對象引用設置爲對象的實例。錯誤,我無法解決

public static CpOfferInterfaceInfo Get() 
    { 
     return new CpOfferInterfaceInfo 
     { 
      Roles = new List<Role> 
      { 
       new Role 
       { 
        RoleType = RoleType.Cp, 
        Statuses = new List<Status> 
        { 
         new Status 
         { 
          StatusEnum = StatusEnum.CpCreatedNew, 
          DisplayAs = "Sent", 
          Functions = { 1,2,3 } 

         }, 
         new Status 
         { 
          StatusEnum = StatusEnum.NcpDeclined, 
          DisplayAs = "Declined", 
          Functions = { 4 } 

         }, 

在當天早些時候精細工作,我改變了一個小東西(函數= {1,3,5 }子句),現在我得到這個錯誤:

對象引用未設置爲對象的實例。

描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。

異常詳細信息:System.NullReferenceException:未將對象引用設置爲對象的實例。

源錯誤:

Line 11:   public static CpOfferInterfaceInfo Get() 
Line 12:   { 
Line 13:    return new CpOfferInterfaceInfo 
Line 14:    { 
Line 15:     Roles = new List<Role> 

這是狀態的C#類:

public class Status 
    { 
     public StatusEnum StatusEnum { get; set; } 
     public string DisplayAs { get; set; } 
     public ICollection<int> Functions { get; set; } 
    } 

的代碼編譯,但在運行時出現故障。任何人有任何想法或經驗呢?我可以更改/嘗試/測試什麼?

+1

您是否嘗試過使用調試器?你要求它打破每一個拋出的異常,並且你檢查變量:一個應該是空的 – Kek

回答

7

我懷疑你以前有:

Functions = new List<int> { 1,2, 3 } 

集上在你的對象初始化正在興建Status實例的屬性。您當前的代碼,像這樣:

Functions = { 1,2,3 } 

只是調用newObject.Functions.Add(1);(等等) - 這是行不通的,而Functions爲空,這是默認。

替代方案:

  • 回去明確創建集合
  • 更改Status代碼來創建集合爲您提供:

    public class Status 
    { 
        public StatusEnum StatusEnum { get; set; } 
        public string DisplayAs { get; set; } 
    
        private readonly ICollection<int> functions = new List<int>; 
        public ICollection<int> Functions { get { return functions; } } 
    } 
    
+0

我會說替代方案2是更慣用的方案 – Firo

+0

@Firo:在某些情況下,當然。在其他情況下,擁有可寫集合屬性是有意義的。我試圖避免在這裏說明太多:) –

+0

謝謝@JonSkeet,這對我有很大的幫助。是的,我想我對此感到困惑。我喜歡你的解決方案,私人設置新的列表。這很酷。謝謝你的幫助!! – vealer

相關問題