使非可空值类型可为空

时间:2009-02-27 18:32:34

标签: c# .net-3.5 non-nullable

我有一个使用有限的简单结构。结构是在调用数据库中的数据的方法中创建的。如果没有从数据库返回的数据我希望能够返回null,但Visual Studio会抱怨,无法将null转换为PackageName.StructName,因为它是一个不可为空的值类型。

如何让它可以为空?

7 个答案:

答案 0 :(得分:23)

您想要查看Nullable<T>值类型。

答案 1 :(得分:11)

public struct Something
{
    //...
}

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

答案 2 :(得分:6)

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

答案 3 :(得分:4)

Nullable<T>是一个包装类,可以创建类型为T的可空版本。您还可以使用语法T? (例如int?)表示类型T的可空版本。

答案 4 :(得分:2)

使用Nullable<T>结构的内置快捷方式,只需在声明中添加?

int? x = null;

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

对于任何其他类型,结构等都是一样的

MyStruct? myNullableStruct = new MyStruct(params);

答案 5 :(得分:1)

你可以制作一些可以为例的东西,例如:

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

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

答案 6 :(得分:1)

您可以使用默认作为替代

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

VelocityRange velocityRange = 默认(VelocityRange);