题
我有一个简单的结构,其具有有限的用途。该结构是在调用从数据库中数据的方法创建的。如果没有从数据库返回的数据我希望能够返回空值,但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' (例如诠释?)表示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);
不隶属于 StackOverflow