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

我有:long? LoadEntityId字段。我有一种方法,可以将其用作参数:

private bool IsUsedInProduction(long? loadEntityId)


问题是当LoadEntityId实际上为空时,我得到Nullable object must have a value.

我现在要做的是:

if ((byte)cboStatus.SelectedValue == 10
    && LoadEntityId.HasValue
    && IsUsedInProduction(LoadEntityId.Value))


但是我认为应该有更好的方法来解决这个问题。

压力

似乎我的解释不够清楚,所以问题是如果我:

if ((byte)cboStatus.SelectedValue == 10
        && IsUsedInProduction(LoadEntityId.Value))


(删除LoadEntityId.HasValue检查),当LoadEntityId实际上为null时,如果我离开它,我会得到异常-好吧,我只是在寻找一种无需此检查就能使我的代码工作的方法。

最佳答案

您使用正确的方法。

有三种选择:

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))

10-08 19:12