将nullable参数传递给方法

时间:2013-04-09 12:09:07

标签: c# nullable

这是我目前的方法,但我不时要处理这个问题,我想知道是否有更优雅的方式。

我有: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检查)我得到异常,如果我离开它 - 我只是想找到一种方法让我的代码在没有这个检查的情况下工作。

3 个答案:

答案 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。