c# - Using Generic T to Determine Compiler-Chosen Overload -
i have following code. plan getsetting() call appropriate version of fromstring(), depending on type of t.
public static t getsetting<t>(persistedsetting setting, t defaultvalue = default(t)) { return fromstring(registrysettings.getsetting(setting.tostring()) string, defaultvalue); } private static string fromstring(string value, string defaultvalue) { return value ?? string.empty; } private static int fromstring(string value, int defaultvalue) { int i; return int.tryparse(value, out i) ? : defaultvalue; } private static decimal fromstring(string value, decimal defaultvalue) { decimal d; return decimal.tryparse(value, out d) ? d : defaultvalue; } private static bool fromstring(string value, bool defaultvalue) { bool b; return bool.tryparse(value, out b) ? b : defaultvalue; } however, on line calls fromstring(), compile error:
the best overloaded method match 'articlemanager.persistedsettings.fromstring(string, string)' has invalid arguments
the compiler assumes fromstring(string, string). there way have use appropriate overload t?
edit:
i'm not sure best guess @ happening overloading determined @ compile time, while getsetting() doesn't know type until run time. but, if that's problem, how 1 go solving particular problem?
overload selection happen @ compile time. that's issue.
you can make happen @ runtime using dynamic:
return fromstring(registrysettings.getsetting(setting.tostring()) string, (dynamic)defaultvalue); read more on msdn: using type dynamic (c# programming guide)
or can make method non-generic method , have set of overloads getsetting, e.g.
public static int getsetting(persistedsetting setting, int defaultvalue = default(int)) { return fromstring(registrysettings.getsetting(setting.tostring()) string, defaultvalue); }
Comments
Post a Comment