【发布时间】:2010-03-08 11:32:20
【问题描述】:
谁能帮忙?
我有一些代码在 2 个项目之间共享。代码指向一个模型,该模型基本上是来自数据库的属性集合。
问题是某些属性在 1 个模型中使用可为空的类型,而另一些则没有
确实 dbs 应该使用相同的,但他们没有..
例如,有一个名为 IsAvailble 的属性在一个模型中使用“bool”,而另一个使用 bool? (可空类型)
所以在我的代码中我执行以下操作
objContract.IsAvailble.Value ? "Yes" : "No" //notice the property .VALUE as its a bool? (nullable type)
但在使用标准“bool”(不可为空)的模型上,此行将失败,因为不可为空的类型没有属性 .VALUE
是否有某种帮助类可以检查属性是否为可空类型,我可以返回 .Value .. 否则我只返回属性。
有人有解决办法吗?
编辑
这就是我现在所拥有的.....我正在检查可空类型版本中的 HasValue
公共静态类 NullableExtensions { public static T GetValue(this T obj) where T : struct { 返回对象; } public static T GetValue(this Nullable obj) where T : struct { 返回对象值; }
public static T GetValue<T>(this T obj, T defaultValue) where T : struct
{
return obj;
}
public static T GetValue<T>(this Nullable<T> obj, T defaultValue) where T : struct
{
if (obj.HasValue)
return obj.Value;
else
return defaultValue;
}
}
【问题讨论】:
-
你拿到的合同不是很好...
-
感谢大家的 cmets,但布尔值?只是一个例子。我还有许多不同的类型可以为空或不可以为空,即 int、int?、DateTime、DateTime? ....我希望一些通用的东西
-
嗨,kobi,是的,我知道它并不理想....但是我现在必须使用它的代码......将来我会改变它
-
你知道事实上,可空版本实际上是有值的吗?
-
嗨 Kobi,代码是使用实体框架和 T4 从数据库自动创建的模型..每个数据库中的模型“应该”相同,但它的“不”.. . 非常糟糕......我试图改进它.. 它不是我的代码......但我有改进它的工作......
标签: c#