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

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

 internal static T GetIniSetting(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 *** return (T)string.Empty; } return defaultValue; } 

我已经尝试过强制转换,而as关键字也无济于事。

‘hacky’方式:

 return (T)(object)string.Empty; 

笔记:

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

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

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

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

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