1

タイプ「オブジェクト」のselectedIDパラメーターを持つ関数があります。

私のパラメータが基になるタイプのデフォルトである場合、つまり整数のデフォルトがゼロの場合、何らかのアクションを実行したいと思います。

「StrictOn」がない場合、次を使用できます。

If selectedID = Nothing Then
    'Do Something
End If

私は次のようなことをする必要がありますか?

If (TypeOf selectedID Is Integer AndAlso selectedID.Equals(0)) _
OrElse (TypeOf selectedID Is String AndAlso selectedID.Equals(Nothing)) _
OrElse .. other types go here .. Then
    'Do something
End If

または、私が見逃しているより簡単な方法はありますか?

4

2 に答える 2

0

私は最終的に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
于 2013-02-26T12:28:39.830 に答える
-1

これにはnull許容型を使用することもできます。

Dim selectedID As Integer? = nothing

...

if selectedID isnot nothing then

    dim value as integer = selectedID.value
    ...

end if

null許容型に値が割り当てられていることを確認する別の方法。

if selectedID.hasValue = true then

   dim value as integer = selectedID.value
   ...

end if
于 2013-02-26T13:21:05.373 に答える