强制转换字符串.在 C# 中空为(泛型)T
本文关键字:泛型 转换 字符串 | 更新日期: 2023-09-27 18:36:43
我有一个实用程序方法,它从旧的.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 中的最后一个参数是可选的,只有当你没有为它提供任何东西时,你才会得到 default(string)。所以使用字符串。空作为默认字符串值使调用如下所示:
string value = GetIniSetting<string>(config, key, string.Empty);