有人可以帮忙吗?
我有一些在两个项目之间共享的代码。代码指向一个模型,该模型基本上是来自db的属性集合。
问题是某些属性在1个模型中使用可空类型而另一个属性不在
真的dbs应该使用相同的但不会... ..
所以例如有一个名为IsAvailble的属性,它在一个模型中使用“bool”而另一个使用bool? (可空类型)
所以在我的代码中我做了以下
objContract.IsAvailble.Value ? "Yes" : "No" //notice the property .VALUE as its a bool? (nullable type)
但是对于使用标准“bool”(不可为空)的模型,此行将失败,因为对于不可为空的类型没有属性.VALUE
是否有某种辅助类,我检查属性是否为可空类型,我可以返回.Value ..否则我只返回属性。
有人有解决方案吗?
修改
这就是我现在所拥有的......我正在检查可空类型版本中的HasValue
public static class NullableExtensions { public static T GetValue(this T obj)其中T:struct { 返回obj; } public static T GetValue(这个Nullable obj),其中T:struct { return obj.Value; }
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;
}
}
答案 0 :(得分:5)
这有点奇怪,但也许你可以在这里使用扩展方法:
static class NullableExtensions
{
public static T GetValue<T>(this T obj) where T : struct
{
return obj;
}
public static T GetValue<T>(this Nullable<T> obj) where T : struct
{
return obj.Value;
}
}
他们将使用可空或常规类型:
int? i = 4;
int j = 5;
int a = i.GetValue();
int b = j.GetValue();
答案 1 :(得分:1)
我不会演员。使用??
运算符
http://msdn.microsoft.com/en-us/library/ms173224(VS.80).aspx
bool? isAvailble = null;
//string displayIsAvailble = (bool)(isAvailble) ? "Yes" : "No"; //exception Nullable object must have a value.
string displayIsAvailble = (isAvailble ?? false) ? "Yes" : "No"; //outputs "no"
Console.WriteLine(displayIsAvailble);
答案 2 :(得分:0)
(bool)(objContract.IsAvailble) ? "Yes" : "No"
答案 3 :(得分:0)
Convert.ToBoolean(objContract.IsAvailble) ? "yes" : "no"
OR
这是你在找什么?
bool? n = false;
bool nn = true;
Console.WriteLine(n ?? nn);
答案 4 :(得分:0)
还有一个选择:
objContract.IsAvailble == true ? "Yes" : "No"
在nullable上,只有true为true,null或false为false。在普通布尔上,真/假是正常的。
答案 5 :(得分:0)
最好我可以建议总是强制转换为可空,然后使用null合并运算符来说明当值为null时你想要的值。 e.g:
string s3 = (bool?)b ?? false ? "yes" : "no";
无论b被定义为bool还是bool,上述都会起作用?
答案 6 :(得分:0)
您可以使用:
bool? b1 = objContract.IsAvailable;
string s1 = b1.Value ? "Yes" : "No";`
无论objectContract.IsAvailable
是bool
还是bool?
还是任何其他可以为空的类型,这都应该有效。
例如日期:
DateTime? t1 = objContract.EitherNullableOrNotNullableDate;
string s1 = t1.Value.ToString();