我有一个使用有限的简单结构。结构是在调用数据库中的数据的方法中创建的。如果没有从数据库返回的数据我希望能够返回null,但Visual Studio会抱怨,无法将null转换为PackageName.StructName,因为它是一个不可为空的值类型。
如何让它可以为空?
答案 0 :(得分:23)
您想要查看Nullable<T>
值类型。
答案 1 :(得分:11)
public struct Something
{
//...
}
public static Something GetSomethingSomehow()
{
Something? data = MaybeGetSomethingFrom(theDatabase);
bool questionMarkMeansNullable = (data == null);
return data ?? Something.DefaultValue;
}
答案 2 :(得分:6)
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
答案 3 :(得分:4)
Nullable<T>
是一个包装类,可以创建类型为T的可空版本。您还可以使用语法T? (例如int?)表示类型T的可空版本。
答案 4 :(得分:2)
使用Nullable<T>
结构的内置快捷方式,只需在声明中添加?
:
int? x = null;
if (x == null) { ... }
对于任何其他类型,结构等都是一样的
MyStruct? myNullableStruct = new MyStruct(params);
答案 5 :(得分:1)
你可以制作一些可以为例的东西,例如:
// Create the nullable object.
int? value = new int?();
// Check for if the object is null.
if(value == null)
{
// Your code goes here.
}
答案 6 :(得分:1)
您可以使用默认作为替代
public struct VelocityRange
{
private double myLowerVelocityLimit;
private double myUpperVelocityLimit;
}
VelocityRange velocityRange = 默认(VelocityRange);