9

我有一个实用方法,它从旧的.INI配置类型文件中返回一个强类型的值,带有签名

internal static T GetIniSetting<T>(string config, string key, T defVal = default(T))

我希望字符串是特殊的,因为在编码器未指定默认值的情况下,我希望defaultValue的默认值为string.Empty,而不是(即 null)。default(string)

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关键字,但无济于事。

4

3 回答 3

14

'hacky'方式:

return (T)(object)string.Empty; 

笔记:

  • 非常安全,因为您检查了先决条件。
  • 引用类型的性能损失不明显。
于 2012-06-08T04:51:49.553 回答
7

你必须这样做:(T)(object)(string.Empty).

此外,一个小的优化是将其存储在静态只读字符串字段中,这样您就不必进行强制转换,而是每个通用参数一次(而不是每个方法调用)

于 2012-06-08T04:52:21.850 回答
0

如果我没记错的话,GetIniSetting 中的最后一个参数是可选的,只有当你不提供任何东西时,你才会得到 default(string)。因此,要使用 string.Empty 作为默认字符串值,请进行如下调用:

string value = GetIniSetting<string>(config, key, string.Empty);
于 2012-06-08T04:54:24.457 回答