我正在做以下事情:
var temp = ConfigurationManager.AppSettings.Cast<KeyValueConfigurationElement>();
上面的一行会抛出错误,表示无法投射。我可能看到的原因是类KeyValueConfigurationElement只有一个参数化的构造函数。没有默认构造函数。
你能帮忙解决这个问题吗?
由于 NISHANT
答案 0 :(得分:0)
明确进行转换
var temp = ConfigurationManager.AppSettings
.Cast<object>()
.Select((a, i) => new KeyValueConfigurationElement(
ConfigurationManager.AppSettings.GetKey(i),
a.ToString()));
AppSettings
是NameValueCollection
,它实现了非通用IEnumerable
接口。因此,为了将连续的LINQ-Select转换为.Cast<object>()
,需要IENumerable<T>
。
答案 1 :(得分:0)
您可以创建一个扩展方法来转换值。
public static class NameValueCollectionExtensions
{
public static KeyValueConfigurationCollection CastToConfigurationCollection(this NameValueCollection settings)
{
var collection = new KeyValueConfigurationCollection();
for (int i = 0; i < settings.Count; i++)
{
var keyValue = new KeyValueConfigurationElement(settings.Keys[i], settings[i]);
collection.Add(keyValue);
}
return collection;
}
}
<强>用法强>
var configurationCollection = ConfigurationManager.AppSettings.CastToConfigurationCollection();