通常、疑問符の主な用途は条件付きx ? "yes" : "no"
です。
しかし、私は別の用途を見ましたが、たとえば?
演算子のこの用途の説明を見つけることができません。
public int? myProperty
{
get;
set;
}
つまり、問題の値の型は null許容型 です。
Null許容型はSystem.Nullable構造体のインスタンスです。 NULL可能型は、その基礎となる値型に対する正しい値の範囲と、追加のNULL値を表すことができます。たとえば、 "Nullable of Int32"と発音される
Nullable<Int32>
には、-2147483648から2147483647までの任意の値を代入できます。または、null値を代入できます。Nullable<bool>
には、true、false、またはnullの値を割り当てることができます。数値やブール型にnullを代入する機能は、データベースや、値を代入できない要素を含む他のデータ型を扱う場合に特に役立ちます。たとえば、データベース内のブール型フィールドには、trueまたはfalseの値を格納できます。あるいは、未定義の場合もあります。class NullableExample { static void Main() { int? num = null; // Is the HasValue property true? if (num.HasValue) { System.Console.WriteLine("num = " + num.Value); } else { System.Console.WriteLine("num = Null"); } // y is set to zero int y = num.GetValueOrDefault(); // num.Value throws an InvalidOperationException if num.HasValue is false try { y = num.Value; } catch (System.InvalidOperationException e) { System.Console.WriteLine(e.Message); } } }
Nullable<int>
の省略形です。 Nullable<T>
は、値型をnull
に設定できるようにするために使用されます。値型は通常 nullにすることはできません 。
に
x ? "yes" : "no"
?は、if文を宣言します。ここで、xはブール条件を表します。 :の前の部分はthenの文で、後の部分はelseの文です。
例えば、
int?
?はnull許容型を宣言し、それより前の型はnull値を持つことができることを意味します。
Null許容型はSystem.Nullable構造体のインスタンスです。 NULL可能型は、その基礎となる値型の通常の値の範囲と、追加のNULL値を表すことができます。たとえば、 "Nullable of Int32"と発音された[
Nullable<Int32>
]には、-2147483648から2147483647までの任意の値を代入することも、null値を代入することもできます。 [Nullable<bool>
]には、値trueまたはfalse、またはnullを割り当てることができます。数値やブール型にnullを代入する機能は、データベースや、値を代入できない要素を含む他のデータ型を扱う場合に特に役立ちます。たとえば、データベース内のブール型フィールドには、trueまたはfalseの値を格納できます。あるいは、未定義の場合もあります。
型がNULL可能であることを宣言します。
実用的な使い方
public string someFunctionThatMayBeCalledWithNullAndReturnsString(int? value)
{
if (value == null)
{
return "bad value";
}
return someFunctionThatHandlesIntAndReturnsString(value);
}
上記の回答に追加するために、これがコードサンプルです。
struct Test
{
int something;
}
struct NullableTest
{
int something;
}
class Example
{
public void Demo()
{
Test t = new Test();
t = null;
NullableTest? t2 = new NullableTest();
t2 = null;
}
}
これによりコンパイルエラーが発生します。
エラー12 nullが許容されない値型であるため、nullを 'Test'に変換できません
NullableTestにはコンパイルエラーがないことに注意してください。 (t2の宣言の中の?に注意してください)
int?
はNullable<int>
の省略形です。2つの形式は交換可能です。
Nullable<T>
は、値型T
と一緒に使用してnull
を受け入れることができる演算子です。
あなたがそれを知らない場合: 値型 はint
、bool
、char
などとして値を受け取る型です...
値への参照を受け入れることはできません。 参照型 ではなく、それらにnull
を割り当てるとコンパイル時エラーが発生します。明らかにそれを受け入れます。
なぜあなたはそれが必要でしょうか?データベースから返された変数が見つからないか未定義の場合のように、値型変数が、うまく動作しないものから返されたnull参照を受け取ることがあるためです。
Microsoftのドキュメント を読むとよいでしょう。