整数値を取得しましたが、NULL かどうかを確認する必要があります。null合体演算子を使用して取得しました
C#:
public int? Age;
if ((Age ?? 0)==0)
{
// do somethig
}
ここで、宣言部分が 3 進数でない古いアプリケーションをチェックインする必要があります。したがって、null 合体演算子を使用せずにこれを実現する方法は次のとおりです。
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;
いくつかのこと:
Age
は整数ではありません-null許容の整数型です。それらは同じではありません。Nullable<T>
詳細については、MSDNのドキュメントを参照してください。
??
はnull合体演算子であり、三項演算子(実際には条件演算子と呼ばれます)ではありません。
null許容型に値があるかどうかを確認するには、を使用するか、 :HasValue
に対して直接確認します。null
if(Age.HasValue)
{
// Yay, it does!
}
if(Age == null)
{
// It is null :(
}
簡単にこれを行うことができます:
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
}
}
Adam からの正解は既にありますが、コードをリファクタリングする別のオプションがあります。
if (Age.GetValueOrDefault() == 0)
{
// it's null or 0
}
上で述べたように、??
は null 合体演算子です。したがって、
(Age ?? 0) == 0
??
演算子を使用せずに
(!Age.HasValue) || Age == 0
ただし、 Nullable< T >を持っているが を持っていない .Net のバージョンはないので??
、あなたの声明は、
ここで、宣言部分が 3 進数でない古いアプリケーションをチェックインする必要があります。
二重に無効です。