2017-02-09 65 views
0

我有一個簡單的類,我想在構造函數初始化它,你可以在這裏看到:初始化在構造類的列表返回溢出異常在C#

public class CameraSetting 
    { 

     public string CameraIP { set; get; } 
     public string CameraType { set; get; } 
     public int CameraGroup { set; get; } 
     public string GateId { set; get; } 

     public List<CameraSetting> MyList { set; get; } 
     public CameraSetting() 
     { 
      MyList = new List<CameraSetting>() 
      { 
       new CameraSetting() { CameraIP = "192", CameraGroup = 0, CameraType = "ورود",GateId = "1"}, 
       new CameraSetting() { CameraIP = "193", CameraGroup = 0, CameraType = "خروج",GateId = "1"}, 
       new CameraSetting() { CameraIP = "194", CameraGroup = 1, CameraType = "ورود",GateId = "2"}, 
       new CameraSetting() { CameraIP = "195", CameraGroup = 1, CameraType = "خروج",GateId = "2"} 

      }; 
     } 
    } 

在我的代碼調用CameraSetting obj=new CameraSetting();。但它返回此錯誤:

{"Exception of type 'System.StackOverflowException' was thrown."} 

enter image description here

+2

你遞歸調用構造函數的內部構造:根據需要將其優良在主或其他一些地方使用這樣。 – juharr

回答

1

這是因爲每一個構造函數創建同一類型的四個實例和操作永遠不會結束。這是它發生的順序...

  1. 創建CameraSetting 1
  2. 然後,CameraSettings實例等4個CameraSettings
  3. 然後,這些CameraSettings的創建另一個4個CameraSettings EACH!也就是說,4 * 4 = 16
  4. 無限重複,當你創建的CameraSetting的目的是將項目添加到列表中,直到運行時殺死進程,StackOverflowException
+0

小修正......對構造函數的每次調用都會遞歸調用相同的構造函數,直到用完堆棧空間。 '4 * 4 * 4 * ...'系列沒有實現,因爲該過程中的每一步都會遞歸一次,而不會返回到第二步。 – Corey

1

每一次,構造函數被調用形成一個無限循環在這裏,並導致異常。

我認爲最好從班級中拿出列表並根據需要將其定義在其他地方。

static void Main(string[] args) 
{ 
    List<CameraSetting> _MyList = new List<CameraSetting>() 
    { 
     new CameraSetting() { CameraIP = "192", CameraGroup = 0, CameraType = "ورود",GateId = "1"}, 
     new CameraSetting() { CameraIP = "193", CameraGroup = 0, CameraType = "خروج",GateId = "1"}, 
     new CameraSetting() { CameraIP = "194", CameraGroup = 1, CameraType = "ورود",GateId = "2"}, 
     new CameraSetting() { CameraIP = "195", CameraGroup = 1, CameraType = "خروج",GateId = "2"} 
    }; 
    // Rest of code here 
}