2016-08-02 69 views
2

我需要创建一个返回任何类型的泛型方法。设置默认类型为通用调用方法C#

我的代码如下

//my callee method 
public T getVal<T>(string key) 
{ 
    string result = ConfigurationManager.AppSettings[key].ToString(); 
    return string.IsNullOrEmpty(result) ? (T)(object)result : default(T); 
} 

// and my caller's 
getval<string>("somekey"); 
getval<int>("somekey1"); 
getval<bool>("somekey2") 

上述呼吁的作品很好.. 但是,我的要求是,我需要设置默认类型(例如:字符串)被叫方法。

eg: getval("somekey"); // callee should consider T as string by default and returns string type. 
getval<int>("somekey2") //this is a normal call to the same callee which returns int type 
+0

这方法不很好地工作:你会得到一个'NullReferenceException'或'InvalidCastException'如果'T'不是'string'和'结果'为空或空字符串。你不能只是将一个字符串转换为'T',你必须转换(解析)它。您可能也想要反转那个空或空的检查,并考虑在这种情况下使用泛型实际上是否有用。 –

回答

9

添加此重载执行:

public string GetVal(string key) 
{ 
    return GetVal<string>(key); 
} 
+0

感谢李的修复!过载,不能覆盖XD – MichaelThePotato

+0

感谢您的快速响应。但我需要使用相同的泛型方法,如果我不提及,应该将字符串视为默认值。 – prathap

+1

这个过载需要照顾! 如果您提到使用的类型,则将调用泛型实现,否则将调用此实现,并将字符串调用为T的通用实现。 如果未指定type,则希望使用其他逻辑这个过载。 据我所知,你不能为泛型方法设置默认的T型, – MichaelThePotato