我有一个使用有限的简单结构。该结构是在从数据库调用数据的方法中创建的。如果没有从数据库返回的数据,我希望能够返回 null,但 Visual Studio 抱怨,无法将 null 转换为 PackageName.StructName,因为它是不可为 null 的值类型。
我怎样才能使它可以为空?
我有一个使用有限的简单结构。该结构是在从数据库调用数据的方法中创建的。如果没有从数据库返回的数据,我希望能够返回 null,但 Visual Studio 抱怨,无法将 null 转换为 PackageName.StructName,因为它是不可为 null 的值类型。
我怎样才能使它可以为空?
您想查看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 =默认值(VelocityRange);