Невозможно привести из 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;
}
}