将默认类型设置为泛型调用方方法C#
我需要创建一个返回任何类型的泛型方法 我的代码如下将默认类型设置为泛型调用方方法C#,c#,generics,C#,Generics,我需要创建一个返回任何类型的泛型方法 我的代码如下 //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
//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")
//我的被调用方方法
公共T getVal(字符串键)
{
字符串结果=ConfigurationManager.AppSettings[key].ToString();
返回字符串.IsNullOrEmpty(结果)?(T)(对象)结果:默认值(T);
}
//我的来电者
getval(“somekey”);
getval(“somekey1”);
getval(“somekey2”)
上面的电话没问题。。
但是,我的要求是需要为被调用方方法设置默认类型(例如:string)。
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
eg:getval(“somekey”);//被调用方默认情况下应将T视为字符串,并返回字符串类型。
getval(“somekey2”)//这是对返回int类型的同一被调用方的正常调用
添加此重载实现:
public string GetVal(string key)
{
return GetVal<string>(key);
}
公共字符串GetVal(字符串键)
{
返回GetVal(键);
}
感谢Lee的修复!过载,而不是覆盖。感谢快速响应。但是我需要使用相同的泛型方法,如果我没有提到的话,应该考虑字符串为默认值。如果您提到使用的类型,将调用泛型实现,否则,将调用此实现,并使用字符串T调用泛型实现。如果您希望在未指定类型的情况下使用其他逻辑,请更改此重载。据我所知,您无法为泛型方法设置默认的T类型,该方法无法正常工作:如果T
不是string
且result
为null或空字符串,您将得到NullReferenceException
或InvalidCastException
。您不能将字符串强制转换为t
,您必须转换(解析)它。您可能还希望反转空或空检查,并考虑在这种情况下使用泛型是否真的有用。