我有一个简单的结构,其具有有限的用途。该结构是在调用从数据库中数据的方法创建的。如果没有从数据库返回的数据我希望能够返回空值,但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' (例如诠释?)表示T类型的可为空的版本。

使用内置的快捷键Nullable<T>结构,通过简单地添加到?声明:

int? x = null;

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

只需同样为任何其它类型,结构等。

MyStruct? myNullableStruct = new MyStruct(params);

您可以做这样的事情可为空的,例如:

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

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

可以使用默认作为替代

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

VelocityRange velocityRange = 默认(VelocityRange);

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top