使用が制限されている単純な構造体があります。構造体は、データベースからデータを呼び出すメソッドで作成されます。データベースからデータが返されない場合、nullを返せるようにしたいのですが、Visual Studioから問題があります。nullはnullにできない値型であるため、PackageName.StructNameに変換できません。
どうすればnullにできますか?
Nullable<T>
値タイプ。
public struct Something
{
//...
}
public static Something GetSomethingSomehow()
{
Something? data = MaybeGetSomethingFrom(theDatabase);
bool questionMarkMeansNullable = (data == null);
return data ?? Something.DefaultValue;
}
Nullable<T>
構造体の定義は次のとおりです。
struct Nullable<T>
{
public bool HasValue;
public T Value;
}
この方法で作成されます。
Nullable<PackageName.StructName> nullableStruct = new Nullable<PackageName.StructName>(params);
次のように入力するだけで、この混乱を回避できます。
PackageName.StructName? nullableStruct = new PackageName.StructName(params);
参照: [〜#〜] msdn [〜#〜]
Nullable<T>
は、T型のnull許容バージョンを作成するラッパークラスです。構文T?も使用できます。 (たとえば、int?)タイプNのnull許容バージョンを表します。
宣言にNullable<T>
を追加するだけで、?
構造体に組み込みのshortcutsを使用します。
int? x = null;
if (x == null) { ... }
他のタイプ、構造体などでもまったく同じです。
MyStruct? myNullableStruct = new MyStruct(params);
たとえば、次のように何かをnull可能にできます。
// Create the nullable object.
int? value = new int?();
// Check for if the object is null.
if(value == null)
{
// Your code goes here.
}
代わりにdefaultを使用できます
public struct VelocityRange
{
private double myLowerVelocityLimit;
private double myUpperVelocityLimit;
}
VelocityRange velocityRange = default(VelocityRange);