57

整数値を取得しましたが、NULL かどうかを確認する必要があります。null合体演算子を使用して取得しました

C#:

public int? Age;

if ((Age ?? 0)==0)
{
   // do somethig
}

ここで、宣言部分が 3 進数でない古いアプリケーションをチェックインする必要があります。したがって、null 合体演算子を使用せずにこれを実現する方法は次のとおりです。

4

6 に答える 6

128

Nullable<T>(または)値が設定されているか、アイテムが null であるかを示すフラグを?公開します。HasValue

また、null 許容型は以下をサポートし==ます。

if (Age == null)

これ??は null 合体演算子であり、ブール式にはなりませんが、値が返されます。

int i = Age ?? 0;

あなたの例では:

if (age == null || age == 0)

または:

if (age.GetValueOrDefault(0) == 0)

または:

if ((age ?? 0) == 0)

または三項:

int i = age.HasValue ? age.Value : 0;
于 2012-09-21T09:47:20.603 に答える
16

いくつかのこと:

Ageは整数ではありません-null許容の整数型です。それらは同じではありません。Nullable<T>詳細については、MSDNのドキュメントを参照してください。

??null合体演算子であり、三項演算子(実際には条件演算子と呼ばれます)ではありません。

null許容型に値があるかどうかを確認するには、を使用するか、 :HasValueに対して直接確認します。null

if(Age.HasValue)
{
   // Yay, it does!
}

if(Age == null)
{
   // It is null :(
}
于 2012-09-21T09:48:18.563 に答える
3

簡単にこれを行うことができます:

    public void CheckNull(int? item)
    {
        if (item != null)
        {
            //Do Something
        }

    }

C# バージョン 9 以降、これを行うことができます。

  public void CheckNull(int? item)
  {
    if (!(item is null))
    {
        //Do Something
    }

  }

またはより読みやすい:

  public void CheckNull(int? item)
  {
    if (item is not null)
    {
        //Do Something
    }

  }
于 2015-10-10T19:43:52.267 に答える
2

Adam からの正解は既にありますが、コードをリファクタリングする別のオプションがあります。

if (Age.GetValueOrDefault() == 0)
{
    // it's null or 0
}
于 2012-09-21T09:50:30.070 に答える
1

上で述べたように、??は null 合体演算子です。したがって、

(Age ?? 0) == 0

??演算子を使用せずに

(!Age.HasValue) || Age == 0

ただし、 Nullable< T >を持っているが を持っていない .Net のバージョンはないので??、あなたの声明は、

ここで、宣言部分が 3 進数でない古いアプリケーションをチェックインする必要があります。

二重に無効です。

于 2012-09-21T09:56:05.523 に答える