2012-06-26 223 views
0

我做以下失敗的對象:System.Configuration.Cast沒有默認的構造函數

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

上面一行拋出一個錯誤,說這是無法施展。我可能看到的原因是類KeyValueConfigurationElement只有一個參數化的構造函數。沒有默認的構造函數。

你能幫忙解決這個問題嗎?

感謝 NISHANT

回答

0

做轉換明確

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

AppSettingsNameValueCollection它實現了非通用IEnumerable接口。因此,需要.Cast<object>()才能將其轉換爲IENumerable<T>以用於連續的LINQ-Select。

+0

我沒有看到的AppSettings的選擇方法 – Nishant

+0

KeyValueConfigurationElement是一個.NET類和參數化的構造函數有兩個字符串(key和value) – Nishant

+0

我添加了一個'。同時在'Select'之前投出()'。 –

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(); 
相關問題