System.Configuration.Cast没有默认构造函数的对象失败

时间:2012-06-26 14:39:22

标签: c# configuration console

我正在做以下事情:

var temp = ConfigurationManager.AppSettings.Cast<KeyValueConfigurationElement>();

上面的一行会抛出错误,表示无法投射。我可能看到的原因是类KeyValueConfigurationElement只有一个参数化的构造函数。没有默认构造函数。

你能帮忙解决这个问题吗?

由于  NISHANT

2 个答案:

答案 0 :(得分:0)

明确进行转换

var temp = ConfigurationManager.AppSettings
    .Cast<object>()
    .Select((a, i) => new KeyValueConfigurationElement(
                              ConfigurationManager.AppSettings.GetKey(i),
                              a.ToString())); 

AppSettingsNameValueCollection,它实现了非通用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();