我使用以下方法。
public static Generic Get<Generic>(this object self)
{
try { return (Generic)self; }
catch (Exception) { return default(Generic); }
}
新要求表明,如果 Int64 null ,则需要将其映射到 -13 。如果类型是 Int64 ,我会尝试通过返回所述修复值来接近它。
public static Generic Get<Generic>(this object self)
{
if (self == null && typeof (Generic) == typeof (long))
return -13;
try { return (Generic)self; }
catch (Exception) { return default(Generic); }
}
但是,编译器不同意我的看法,因为它担心当 Generic 类型与所述值不兼容时,我将返回 -13 。我该如何解决?
我尝试使用谷歌搜索自定义默认值,但得到了nada。
答案 0 :(得分:3)
您可以先将其object
打包:
return (Generic)(object)-13;
然后,您将在编译时获得两个可接受的转换链。
答案 1 :(得分:2)
尝试这样做:
public static Generic Get<Generic>(this object self)
{
return
self == null && typeof(long) == typeof(Generic)
? (Generic)(object)-13L
: (Generic)self;
}
鉴于多种类型的扩展需求,这可行:
private static Dictionary<Type, Delegate> map = new Dictionary<Type, Delegate>()
{
{ typeof(long), (Func<object, long>)(o => o == null ? -13 : (long)o) },
{ typeof(float), (Func<object, float>)(o => o == null ? -13.0f : (float)o) },
{ typeof(double), (Func<object, double>)(o => o == null ? -13.0 : (double)o) },
};
public static Generic Get<Generic>(this object self)
{
return
map.ContainsKey(typeof(Generic))
? ((Func<object, Generic>)(map[typeof(Generic)]))(self)
: (Generic)self;
}