Ответ 1
Вы хотите изучить тип значения Nullable<T>
.
У меня есть простая структура, которая имеет ограниченное использование. Структура создается в методе, который вызывает данные из базы данных. Если нет данных, возвращаемых из базы данных, я хочу иметь возможность возвращать нуль, но Visual Studio жалуется, не может преобразовать null в имя PackageName.StructName, потому что это тип значения, который не является нулевым.
Как я могу сделать его нулевым?
Вы хотите изучить тип значения 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. Вы также можете использовать синтаксис T? (например, int?), чтобы представить версию с нулевым значением типа T.
Вы можете сделать что-то нулевое, например, следующим образом:
// Create the nullable object.
int? value = new int?();
// Check for if the object is null.
if(value == null)
{
// Your code goes here.
}
Используйте встроенные ярлыки для структуры Nullable<T>
, просто добавив ?
в объявление:
int? x = null;
if (x == null) { ... }
То же самое для любого другого типа, структуры и т.д.
MyStruct? myNullableStruct = new MyStruct(params);
Вы можете использовать по умолчанию в качестве альтернативы
public struct VelocityRange
{
private double myLowerVelocityLimit;
private double myUpperVelocityLimit;
}
VelocityRange velocityRange = по умолчанию (VelocityRange);