正在执行以下操作:
var temp = ConfigurationManager.AppSettings.Cast<KeyValueConfigurationElement>();
上面的行抛出一个错误,说它无法投射。我可能看到的原因是 KeyValueConfigurationElement 类只有一个参数化的构造函数。没有默认构造函数。
你能帮忙解决这个问题吗?
谢谢尼山特
正在执行以下操作:
var temp = ConfigurationManager.AppSettings.Cast<KeyValueConfigurationElement>();
上面的行抛出一个错误,说它无法投射。我可能看到的原因是 KeyValueConfigurationElement 类只有一个参数化的构造函数。没有默认构造函数。
你能帮忙解决这个问题吗?
谢谢尼山特
您可以创建一个扩展方法来转换值。
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();
显式进行转换
var temp = ConfigurationManager.AppSettings
.Cast<object>()
.Select((a, i) => new KeyValueConfigurationElement(
ConfigurationManager.AppSettings.GetKey(i),
a.ToString()));
AppSettings
是一个NameValueCollection
实现非泛型IEnumerable
接口的。因此.Cast<object>()
需要将其转换IENumerable<T>
为后续的 LINQ-Select。