如果值类型被声明为可为空,那么我该如何采取预防措施呢?即如果在构造函数中我有:
public Point3 ( Point3 source )
{
this.X = source.X;
this.Y = source.Y;
this.Z = source.Z;
}
如果source为null,它会失败吗?
答案 0 :(得分:10)
如果Point3
是值类型,我认为null
不可能Point3?
。你不想错过问号吗?如果您的意思是public Point3 ( Point3? source )
{
this.X = source.Value.X;
this.Y = source.Value.Y;
this.Z = source.Value.Z;
}
,那么您应该像以下一样访问它:
Value
在这种情况下,null
属性会抛出异常,如果它是{{1}}。
答案 1 :(得分:3)
此方法的调用者将无法传入可为空的点,因为该方法采用常规点,而不是Nullable点。因此,您不必担心构造函数代码中的Point为null。
答案 2 :(得分:2)
是的,如果source
为空,则会失败。
如果source
为空,您必须确定正确的行为。你可能只是抛出异常。
public Point3 ( Point3? source )
{
if (source == null)
{
throw new ArgumentNullException("source");
}
this.X = source.Value.X;
this.Y = source.Value.Y;
this.Z = source.Value.Z;
}
或者,如果您不想接受null
的{{1}}值,请按照示例中的方法保留该方法。该方法不接受source
,因此在这种情况下您不必担心它是Nullable<Point3>
。
答案 3 :(得分:1)
如果source
是Point3?
,则不会是Point3
。据我所知,编译时间会失败。要发送Point3?
,您必须使用.Value
,如果它为空则会抛出异常。
答案 4 :(得分:1)
public Point3(Point3? source) {
this.X = source.GetValueOrDefault().X;
this.Y = source.GetValueOrDefault().Y;
this.Z = source.GetValueOrDefault().Z;
}