在C#中将string.Empty转换为(generic)T?

时间:2012-06-08 04:49:06

标签: c# generics casting

我有一个实用程序方法,它从旧的.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关键字无效。

3 个答案:

答案 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);