繁体   English   中英

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

[英]Cast string.Empty to (generic) T in C#?

我有一个实用程序方法,它使用签名从旧的.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关键字也无济于事。

'hacky'方式:

return (T)(object)string.Empty; 

笔记:

  • 非常安全,因为您有检查前提条件。
  • 对引用类型的性能损失不明显。

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

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

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

string value = GetIniSetting<string>(config, key, string.Empty);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM