将默认类型设置为通用调用方法C#

3
我需要创建一个通用的方法,可以返回任何类型。
我的代码如下:
//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

那个方法不太好用:如果T不是string,并且result为null或空字符串,你会得到一个NullReferenceExceptionInvalidCastException。你不能只是将一个字符串强制转换为T,你需要将其转换(解析)。你可能还想反转那个null或空检查,并考虑在这种情况下使用泛型是否真的有用。 - Pieter Witvoet
1个回答

9

请添加这个重载实现:

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

感谢李的修复!是overload,不是override XD - MichaelThePotato
谢谢您的快速回复。但是我需要使用相同的通用方法,如果我没有指定,则应将字符串视为默认值。 - prathap
1
这个重载方法会处理这个问题! 如果你使用<T>来指定一个类型,那么将会调用通用实现;否则,将会调用这个实现,并使用字符串作为T参数调用通用实现。 如果你希望在没有指定类型时使用其他逻辑,请更改这个重载方法。 据我所知,你不能设置通用方法的默认T类型。 - MichaelThePotato

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接