23

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

我怎样才能使它可以为空?

4

7 回答 7

23

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

于 2009-02-27T18:34:03.907 回答
13
public struct Something
{
    //...
}

public static Something GetSomethingSomehow()
{
    Something? data = MaybeGetSomethingFrom(theDatabase);
    bool questionMarkMeansNullable = (data == null);
    return data ?? Something.DefaultValue;
}
于 2009-02-27T18:37:25.117 回答
8

结构的定义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

于 2009-02-27T18:42:00.910 回答
4

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

于 2009-02-27T18:38:41.883 回答
2

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

int? x = null;

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

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

MyStruct? myNullableStruct = new MyStruct(params);
于 2016-05-09T07:18:41.653 回答
1

您可以使某些东西可以为空,例如:

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

// Check for if the object is null.
if(value == null)
{
    // Your code goes here.
}
于 2013-01-20T01:04:45.527 回答
0

您可以使用默认值作为替代

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

VelocityRange velocityRange =默认值(VelocityRange);

于 2016-05-16T05:48:18.837 回答