繁体   English   中英

使非可空值类型可为空

[英]Making a Non-nullable value type nullable

我有一个简单的结构,使用有限。 结构是在调用数据库中的数据的方法中创建的。 如果没有从数据库返回的数据我希望能够返回null,但是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的可空版本。

使用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 = default (VelocityRange);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM