这是我目前的方法,但我不时要处理这个问题,我想知道是否有更优雅的方式。
我有:long? LoadEntityId
字段。我有一个方法,我用它作为一个参数:
private bool IsUsedInProduction(long? loadEntityId)
问题是当LoadEntityId
实际为空时,我得到Nullable object must have a value.
我现在做的是:
if ((byte)cboStatus.SelectedValue == 10
&& LoadEntityId.HasValue
&& IsUsedInProduction(LoadEntityId.Value))
但我认为应该有更好的方法来解决这个问题。
P.S
在我的解释中,我似乎不够清楚所以问题是如果我:
if ((byte)cboStatus.SelectedValue == 10
&& IsUsedInProduction(LoadEntityId.Value))
当LoadEntityId实际为null时,(删除LoadEntityId.HasValue检查)我得到异常,如果我离开它 - 我只是想找到一种方法让我的代码在没有这个检查的情况下工作。
答案 0 :(得分:6)
你使用正确的方法。
有三种选择:
1)检查loadEntityId.HasValue然后使用loadEntityId.Value(你现在使用的)
2)使用loadEntityId.GetValueOrDefault()
if ((byte)cboStatus.SelectedValue == 10
&& IsUsedInProduction(loadEntityId.GetValueOrDefault()))
3)使用?操作
if ((byte)cboStatus.SelectedValue == 10
&& (IsUsedInProduction(loadEntityId ?? 0))
答案 1 :(得分:1)
宣布:
private bool IsUsedInProduction(long? loadEntityId)
实际上与:
相同private bool IsUsedInProduction(Nullable<long> loadEntityId)
因此,当您将null
传递给该方法时,会创建一个Nullable类型对象,其中loadEntityId.HasValue
等于false
并且loadEntityId.Value
会在调用时抛出异常,因为没有价值。 Bellow有一个合理使用Nullable的例子。其他信息:http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx
定义示例:
private bool IsUsedInProduction(long? loadEntityId)
{
if(loadEntityId.HasValue)
{
//do something WITH loadEntityId.Value
} else
{
//do something
}
}
致电示例:
IsUsedInProduction(null);
IsUsedInProduction(21);
IsUsedInProduction(23);
答案 2 :(得分:0)
我不是100%肯定你在问什么,但我认为答案可能是?操作者:
if(loadEntity ?? -1 > 0){...}
这意味着如果loadEntity有一个值,则使用loadEntity的值,如果它为null,则使用值-1。