2016-05-27 90 views
2

我需要這樣的東西:鑄造誤差ConnectionStringSettingsCollection

Configuration cf = ConfigurationManager.OpenExeConfiguration("name_of.exe"); 
ConnectionStringSettingsCollection s = cf.ConnectionStrings; 

但是,這給出了一個錯誤:

Cannot implicitly convert type 'ConnectionStringsSection' to 'ConnectionStringsSectionCollection'

當我這樣做:

ConnectionStringSettingsCollection s = ConfigurationManager.ConnectionStrings; 

沒有錯誤,但我需要第一個,因爲我沒有使用默認的配置文件。 那麼爲什麼在第一種情況下(而不是在第二種情況下)轉換失敗?

編輯: 對不起,但與'第一'我第一代碼示例,而不是第一個連接字符串。由於某些原因,第二個代碼示例沒有將connectionsStrings轉換爲ConnectionsStringSettingsCollection,但第一個代碼示例沒有,那是我的問題。

回答

2

第一個代碼塊使用Configuration類,它有一個屬性ConnectionStringsConnectionStringsSection類型和你想這個分配給ConnectionStringSettingsCollection對象,不兼容。

第二個代碼塊試圖將相同類型ConnectionStringSettingsCollection分配給類型爲ConnectionStringSettingsCollection的靜態類ConfigurationManager.ConnectionStrings上的屬性。

雖然名稱相同,但屬性不同類型,請參閱文檔...

Configuration.ConnectionStrings Property

public ConnectionStringsSection ConnectionStrings { get; }

ConfigurationManager.ConnectionStrings Property

public static ConnectionStringSettingsCollection ConnectionStrings { get; }

+0

所以我不得不做的事:「ConnectionStringSettingsCollection S = cf.ConnectionStrings.ConnectionStrings! – Ruud

0

更新編輯後OP:

你分配給一個錯誤的數據類型,這就是爲什麼錯誤;

Configuration cf = ConfigurationManager.OpenExeConfiguration("name_of.exe"); 
ConnectionStringsSection s = cf.ConnectionStrings; 

的屬性名稱是相同的,但是它們屬於不同的類型和屬性本身的不同類型,即第一代碼段正試圖訪問屬於類型(類)ConfigurationConnectionStrings屬性。數據類型爲ConnectionStringSection

第二個片段試圖訪問屬於他們類型(類)ConfigurationManager的屬性ConnectionStrings。這種數據類型是ConnectionStringSettings

OP編輯之前:

這是一個集合,如果你需要的第一個你能不能只使用索引0就像...

ConnectionStringSettings s = ConfigurationManager.ConnectionStrings[0]; 

更安全,你可能要添加算上檢查訪問它之前...一個更好的版本是這樣的:

ConnectionStringSettings s = (ConfigurationManager.ConnectionStrings.Count > 0) 
        ? ConfigurationManager.ConnectionStrings[0] 
        : null; 

說明: 你的ConnectionStrings的數據類型爲的210,這基本上意味着它可以容納0或更多的ConnectionStringSettings。現在如果你需要第一個,你可以指定索引,即0,它會返回你第一個ConnectionStringSettings。只是一定要使用正確的數據類型,或者只使用var