我有一个实用程序方法,它从旧的.INI
配置类型文件返回一个强类型值,带有签名
internal static T GetIniSetting<T>(string config, string key, T defVal = default(T))
我希望字符串是特殊的,因为我希望 defaultValue 的默认值为string.Empty
,而不是default(string)
(即null),在这种情况下编码器没有指定默认值。
if (cantFindValueInIniFile == true)
{
if ((typeof(T) == typeof(string)) && (defaultValue == null))
{
// *** Code needed here - Cannot convert string to <T>***
return (T)string.Empty;
}
return defaultValue;
}
我已经尝试过强制转换,as
关键字无效。
答案 0 :(得分:12)
'hacky'方式:
return (T)(object)string.Empty;
注意:
答案 1 :(得分:6)
你必须这样做:(T)(object)(string.Empty)
。
此外,一个小优化是将它存储在一个静态只读字符串字段中,这样你就不必每个通用参数(而不是每个方法调用)执行一次转换(
)答案 2 :(得分:0)
如果我没弄错,GetIniSetting中的最后一个参数是可选的,只有当你没有为它提供任何东西时你才会得到默认值(字符串)。因此,要将string.Empty用作默认字符串值,请执行以下调用:
string value = GetIniSetting<string>(config, key, string.Empty);