Невозможно привести из KeyValueConfigurationCollection к производному классу

Попытка справиться (внутренне) KeyValueConfigurationCollection Исключения, когда значение из этого индексатора не существует, у меня ошибка.

public class ConfigCore
{

    public static Configuration config 
    {
        get 
        {
             ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap();
             configFileMap.ExeConfigFilename = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "App.config");
             return ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
        }
    }

    public static SettingsManager Settings
    {
        get
        {
            //config is an instance of System.Configuration.Configuration and works well.
            return (SettingsManager) config.AppSettings.Settings;
        }
    }

    internal static KeyValueConfigurationCollection Setts
    {
        get
        {
            return config.AppSettings.Settings;
        }
    }

    public static void CreateSettingEntry(string key, string value)
    {
        try
        {
            Setts.Add(key, value);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error ocurred trying to add value to Config. Message: {0}", ex.ToString());
        }
    }
}

public class SettingsManager : KeyValueConfigurationCollection
{
    public KeyValueConfigurationElement this[string key]
    {
        get
        {
            if (ConfigCore.Setts[key] == null)
                ConfigCore.CreateSettingEntry(key, "");
            return ConfigCore.Setts[key];
        }
    }
}

Я хочу избежать того, чтобы пользователь делал следующее, используя мой API:

if(ConfigCore.Settings["key"] == null)
    ConfigCore.CreateSettingEntry("key", "");

ConfigCore.Settings["key"].Value = "value";

И по этой причине я создал внутренний индексатор для поиска этих случаев и автоматического вызова метода, который создает запись перед ее настройкой.

Но по какой-то причине происходит исключение, говоря, что KeyValueConfigurationCollection не может быть брошено в SettingsManagerпочему, если SettingsManager является унаследованным классом KeyValueConfigurationCollectionчто я забыл?

Заранее спасибо!

1 ответ

Я работал над этим вопросом только сегодня.

public static class KeyValueConfigurationCollectionExtension 
    {
        public static bool ContainsKey<T>(T key)
        {
            System.Collections.Specialized.NameValueCollection coll = new System.Collections.Specialized.NameValueCollection();

            string keyValue = key.ToString();
            int upperBound = coll.Count;
            List<string> items = new List<string>();
            for(int i = 0; i < upperBound; i++)
            {
                items.Add(coll[i].ToString());
            }

            int index = items.IndexOf(keyValue);
            if(index >= 0)
                return true;

            return false;

        }
    }
Другие вопросы по тегам