Подтвердить что ты не робот

Создание значения типа null-nullable nullable

У меня есть простая структура, которая имеет ограниченное использование. Структура создается в методе, который вызывает данные из базы данных. Если нет данных, возвращаемых из базы данных, я хочу иметь возможность возвращать нуль, но Visual Studio жалуется, не может преобразовать null в имя PackageName.StructName, потому что это тип значения, который не является нулевым.

Как я могу сделать его нулевым?

4b9b3361

Ответ 1

Вы хотите изучить тип значения Nullable<T>.

Ответ 2

public struct Something
{
    //...
}

public static Something GetSomethingSomehow()
{
    Something? data = MaybeGetSomethingFrom(theDatabase);
    bool questionMarkMeansNullable = (data == null);
    return data ?? Something.DefaultValue;
}

Ответ 3

Определение для структуры 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

Ответ 4

Nullable<T> - это класс-оболочка, который создает нулевую версию типа T. Вы также можете использовать синтаксис T? (например, int?), чтобы представить версию с нулевым значением типа T.

Ответ 5

Вы можете сделать что-то нулевое, например, следующим образом:

// Create the nullable object.
int? value = new int?();

// Check for if the object is null.
if(value == null)
{
    // Your code goes here.
}

Ответ 6

Используйте встроенные ярлыки для структуры Nullable<T>, просто добавив ? в объявление:

int? x = null;

if (x == null) { ... }

То же самое для любого другого типа, структуры и т.д.

MyStruct? myNullableStruct = new MyStruct(params);

Ответ 7

Вы можете использовать по умолчанию в качестве альтернативы

public struct VelocityRange
{
    private double myLowerVelocityLimit;
    private double myUpperVelocityLimit;
}

VelocityRange velocityRange = по умолчанию (VelocityRange);