2012-07-08 88 views
1

我試圖設計一個鏈接構造函數的系統,我認爲這種方式可能不可行,但我想先檢查一下。鏈接構造函數時初始化字典<string,string>

我有5個重載的構造函數如下:

public SqlCeDB(string filename) 
public SqlCeDb(string filename, Dictionary<string, string> options) 
public SqlCeDB(string filename, string password) 
public SqlCeDB(string filename, string password, Dictionary<string, string> options) 
public SqlCeDB(Dictionary<string, string> options) 

我想有內置到最後一個構造函數的所有邏輯,並有其他人控制權交給它。現在我有一個工作的第一個構造函數如下:

public SqlCeDB(string filename) 
    : this(new Dictionary<string, string> { { "DataSource", filename } }) 
{ 
} 

但是有沒有辦法做到這一點?我想像上面那樣創建一個新的字典,但我還需要複製已存在於名爲「options」的現有字典中的選項。

+0

不在我的開發機器上,但你可以不這樣做:this(options.Add(「DataSource」,filename)) – Prescott 2012-07-08 18:31:22

回答

6

當然 - 只需要調用它創建一個現有的拷貝構造函數:

public SqlCeDB(string filename, Dictionary<string, string> options) 
    : this(new Dictionary<string, string>(options) { 
       { "DataSource", filename } 
      }) 
{ 
} 

集合初始化仍然可以調用參數化的構造爲正常。請注意,這將創建一個新的字典,但它不會將新條目添加到現有的字典中。