0

次のことをしています:

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

上記の行は、キャストできないというエラーをスローします。私がおそらく見る理由は、クラス KeyValueConfigurationElement にはパラメーター化されたコンストラクターが 1 つしかないためです。デフォルトのコンストラクターはありません。

これを回避するのを手伝ってもらえますか?

ありがとうニシャント

4

2 に答える 2

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();
于 2012-06-26T14:59:49.027 に答える
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>

于 2012-06-26T14:43:25.980 に答える