如何在调用另一个构造函数之前测试空值?
说:
' class MyHoyr '
Public Sub New(ByVal myHour As MyHour)
' Can't doing it here !!!! '
If myHour Is Nothing Then Throw New ArgumentNullException("myHour")
' Constructor call should be first '
Me.New(myHour._timeSpan)
' Here is too late... '
End Sub
Private Sub New(ByVal timeSpan As TimeSpan)
'.... '
End Sub
最佳答案
我在 C# 中这样做的方法是在管道中使用静态方法,例如:
public MyHour(MyHour myHour) : this(GetTimeSpan(myHour))
{}
private static TimeSpan GetTimeSpan(MyHour myHour)
{
if(myHour== null) throw new ArgumentNullException("myHour");
return myHour._timeSpan;
}
private MyHour(TimeSpan timeSpan)
{...}
我假设你可以在 VB 中做一些非常相似的事情。 (共享方法?)
Reflector 向我保证这可以转化为:
Public Sub New(ByVal myHour As MyHour)
Me.New(MyHour.GetTimeSpan(myHour))
End Sub
Private Sub New(ByVal timeSpan As TimeSpan)
End Sub
Private Shared Function GetTimeSpan(ByVal myHour As MyHour) As TimeSpan
If (myHourIs Nothing) Then
Throw New ArgumentNullException("myHour")
End If
Return myHour._timeSpan
End Function
关于.net - 构造函数链和空引用测试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6228665/