2

これは私の現在の方法ですが、時々この問題に対処する必要があり、よりエレガントな方法があるかどうか知りたいです。

私は :long? LoadEntityIdフィールドを持っています。これを引数として使用するメソッドがあります:

private bool IsUsedInProduction(long? loadEntityId)

問題は、LoadEntityId実際にnullがいつ取得されるかですNullable object must have a value.

私が今していることはこれです:

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

しかし、この問題を管理するためのより良い方法があるはずだと思います。

PS

私の説明では十分に明確ではなかったようです。問題は、次の場合です。

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

(LoadEntityId.HasValueチェックを削除)LoadEntityIdが実際にnullの場合、そのままにしておくと例外が発生します-まあ、このチェックなしでコードを機能させる方法を探すだけです。

4

3 に答える 3

6

正しいアプローチを使用します。

次の 3 つのオプションがあります。

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))
于 2013-04-09T12:14:43.137 に答える
0

私はあなたが何を求めているのか100%確信が持てませんが、答えは ?? オペレーター:

if(loadEntity ?? -1 > 0){...}

これは、loadEntity の値がある場合はその値が使用され、null の場合は値 -1 が代わりに使用されることを意味します。

于 2013-04-09T12:12:47.117 に答える