J'ai une structure simple qui a un usage limité. La structure est créée dans une méthode qui appelle les données de la base de données. S'il n'y a pas de données renvoyées par la base de données, je souhaite pouvoir renvoyer une valeur null, mais Visual Studio se plaint. Impossible de convertir une valeur null en packageName.StructName car il s'agit d'un type valeur non nullable.
Comment puis-je le rendre nul?
Vous voulez examiner le type Nullable<T>
value.
public struct Something
{
//...
}
public static Something GetSomethingSomehow()
{
Something? data = MaybeGetSomethingFrom(theDatabase);
bool questionMarkMeansNullable = (data == null);
return data ?? Something.DefaultValue;
}
La définition d'une structure Nullable<T>
est la suivante:
struct Nullable<T>
{
public bool HasValue;
public T Value;
}
Il est créé de cette manière:
Nullable<PackageName.StructName> nullableStruct = new Nullable<PackageName.StructName>(params);
Vous pouvez raccourcir ce désordre en tapant simplement:
PackageName.StructName? nullableStruct = new PackageName.StructName(params);
Voir: MSDN
Nullable<T>
est une classe wrapper qui crée une version nullable du type T. Vous pouvez également utiliser la syntaxe T? (par exemple int?) pour représenter la version nullable du type T.
Utilisez les raccourcis intégrés pour la structure Nullable<T>
, en ajoutant simplement ?
à la déclaration:
int? x = null;
if (x == null) { ... }
Même chose pour tout autre type, struct, etc.
MyStruct? myNullableStruct = new MyStruct(params);
Vous pouvez faire quelque chose de nullable par exemple comme ceci:
// Create the nullable object.
int? value = new int?();
// Check for if the object is null.
if(value == null)
{
// Your code goes here.
}
Vous pouvez utiliser default comme alternative
public struct VelocityRange
{
private double myLowerVelocityLimit;
private double myUpperVelocityLimit;
}
VelocityRange velocityRange = default (VelocityRange);