Una soluzione più elegante che fa uso dei Generics:
codice:
    static class Settings<T>
    {
        public static T GetValue(string key, T def_value)
        {
            //cerca il valore nella tabella dei Settings:
            //se la chiave esiste fa il cast del valore
            //altrimenti ritorna def_value
            if (condizione)
                return (T)valore;
            else
                return def_value;
        }
    }

//utilizzo
int i = Settings<int>.GetValue("numero", 0);
string s = Settings<string>.GetValue("scritta", "");