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 value or the presence of empty values. Right now I was using type initializers, like
private static readonly string someStr = ConfigurationManager.AppSettings["abc"];
to do the job. However, if a string with key "abc" doesn't exist in App.config
the execution will happilly continue with a null
reference in place of someStr
. What is, then, the best way to validate this value on initialization? A static constructor in which I initialize the value and then check for validity? I heard static constructors are to be avoided and replaced by type initializers when possible.
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:I'm using something like this:
Or to handle empty string:
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:
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.