私は最終的にNeoliskの提案を実装しました。これには、短く、包括的で、非常に再利用できるという利点がありました。
Public Function IsDefaultObject(obj As Object) As Boolean
Return obj.Equals(GetDefaultValue(obj.GetType()))
End Function
Public Function GetDefaultValue(t As Type) As Object
If (t.IsValueType) Then Return Activator.CreateInstance(t)
Return Nothing
End Function
私はもともと、オブジェクトにデフォルト値が割り当てられているかどうかを通知する関数IsDefaultObject(obj)を作成するソリューションを採用しました。より多くのタイプが注目されるようになったので、私はそれに追加することを計画しました。
Private Function IsDefaultObject(obj As Object) As Boolean
If obj Is Nothing Then Return True
If String.IsNullOrEmpty(obj.ToString()) Then Return True
If obj.Equals(0) Then Return True
If obj.Equals(New Date()) Then Return True
Return False
End Function
もちろん、HansPassantのコメントで解決策を使用することもできます。
Private Function IsDefaultObject(obj As Object) As Boolean
Return Microsoft.VisualBasic.CompilerServices.Operators.
ConditionalCompareObjectEqual(obj, Nothing, False)
End Function