[英]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.