I would like to use ConfigurationManager
to access some string values from a static class. However, I need to handle specifically the absence of a valu
static constructors are fine, the great thing about them is that they are guaranteed by the runtime to be executed once and once only - the first time the class is used in any circumstance.
You could alternatively use the coalesce operator (??
) to set a default value:
private static readonly string someStr = ConfigurationManager.AppSettings["abc"] ?? "some default value";
This just came up in a code review. The answers provided are great for strings. But they don't work for an int or a double, etc... Today, I needed to do this for a retry count and it needs to be an int.
So here is an answer for those who want Type conversion included.
Use this extension method:
using System.Collections.Specialized;
using System.ComponentModel;
namespace Rhyous.Config.Extensions
{
public static class NameValueCollectionExtensions
{
public static T Get<T>(this NameValueCollection collection, string key, T defaultValue)
{
var value = collection[key];
var converter = TypeDescriptor.GetConverter(typeof(T));
if (string.IsNullOrWhiteSpace(value) || !converter.IsValid(value))
{
return defaultValue;
}
return (T)(converter.ConvertFromInvariantString(value));
}
}
}
I also have unit tests for it, which you can find here: http://www.rhyous.com/2015/12/02/how-to-easily-access-a-web-config-appsettings-value-with-a-type-and-a-default-value
Hope that helps the next guy.
I'm using something like this:
public static readonly string someStr =
ConfigurationManager.AppSettings["abc"] ?? "default value";
Or to handle empty string:
public static readonly string someStr =
!String.IsNullOrEmpty(ConfigurationManager.AppSettings["abc"]) ?
ConfigurationManager.AppSettings["abc"] : "default value";