Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使不可为null的值类型可为null_C#_.net 3.5_Non Nullable - Fatal编程技术网

C# 使不可为null的值类型可为null

C# 使不可为null的值类型可为null,c#,.net-3.5,non-nullable,C#,.net 3.5,Non Nullable,我有一个使用有限的简单结构。结构是在从数据库调用数据的方法中创建的。如果没有从数据库返回数据,我希望能够返回null,但Visual Studio抱怨,无法将null转换为PackageName.StructName,因为它是不可为null的值类型 public struct Something { //... } public static Something GetSomethingSomehow() { Something? data = MaybeGetSomethin

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

public struct Something
{
    //...
}

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

如何使其可为空?

您想查看值类型。

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

可空结构的定义为:

public struct Something
{
    //...
}

public static Something GetSomethingSomehow()
{
    Something? data = MaybeGetSomethingFrom(theDatabase);
    bool questionMarkMeansNullable = (data == null);
    return data ?? Something.DefaultValue;
}
struct Nullable<T>
{
    public bool HasValue;
    public T Value;
}

请参阅:

您可以使某些内容可为空,例如:

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

// Check for if the object is null.
if(value == null)
{
    // Your code goes here.
}
只需将
添加到声明中,即可使用
可为null的
结构的内置快捷方式:

int? x = null;

if (x == null) { ... }
对于任何其他类型、结构等都一样

MyStruct? myNullableStruct = new MyStruct(params);

您可以使用默认值

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

VelocityRange VelocityRange=默认值(VelocityRange)

据我所知,这段代码并没有像Malfist希望的那样返回null。IIRC,它是用来说明可空类型的用法的,因为海报似乎并不完全理解它们是什么在不存在值的情况下可能是一个更好的默认返回值。我使用了它,但它仍然会抱怨
public struct VelocityRange
{
    private double myLowerVelocityLimit;
    private double myUpperVelocityLimit;
}