2016-05-27 44 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