Я использую эти расширения , Это сокращенно. Существует несколько других методов анализа значений для других типов.
Таким образом, я могу быть явным с сообщениями об ошибках, так что если параметр требуется, но отсутствует, он не прерывается молча или бросает неопределенное исключение.
public static class AppSettingsExtensions
{
public static string Required(this NameValueCollection appSettings, string key)
{
var settingsValue = appSettings[key];
if (string.IsNullOrEmpty(settingsValue))
throw new MissingAppSettingException(key);
return settingsValue;
}
public static string ValueOrDefault(this NameValueCollection appSettings, string key, string defaultValue)
{
return appSettings[key] ?? defaultValue;
}
}
public class MissingAppSettingException : Exception
{
internal MissingAppSettingException(string key, Type expectedType)
: base(string.Format(@"An expected appSettings value with key ""{0}"" and type {1} is missing.", key, expectedType.FullName))
{ }
public MissingAppSettingException(string key)
: base(string.Format(@"An expected appSettings value with key ""{0}"" is missing.", key))
{ }
}
Использование:
var setting = ConfigurationManager.AppSettings.Required("thisCantBeMissing");
var optionalSetting = ConfigurationManager.AppSettings.ValueOrDefault("thisCanBeMissing", "default value");
Второй удобно, потому что я часто не нужно, чтобы создать ключ AppSettings. Я могу просто использовать значение по умолчанию.
Как насчет 'ConfigurationManager.AppSettings [" configValue "]'? – leppie
Почему бы вам не запустить код и не узнать сами. – Servy
Оба способа одинаковы, семантически. Вопрос в том, хотите ли вы, чтобы ваш var был назначен, когда нет значения конфигурации или нет. В обоих случаях требуется нулевая проверка. – Jay