我有一个破旧的属性映射的界面:
interface IPropertyMap
{
bool Exists(string key);
int GetInt(string key);
string GetString(string key);
//etc..
}
我想创建一个像这样的扩展方法:
public static T GetOrDefault<T>(this IPropertyMap map, string key, T defaultValue)
{
if (!map.Exists(key))
return defaultValue;
else
{
if (typeof(T) == typeof(int)) return (T)map.GetInt(key);
//etc..
}
}
但编译器不会让我转换为 T。我尝试添加where T : struct
但这似乎没有帮助。
我缺少什么?
我相信这是因为编译器不知道它需要执行什么类型的操作。 IIRC,如果你引入拳击,你就可以让它发挥作用:
if (typeof(T) == typeof(int)) return (T)(object)map.GetInt(key);
但这在性能方面并不理想。
不幸的是,我认为这只是泛型的限制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)