1

ComboBox 内の項目をプログラムで選択するための独自のメソッドを作成しました。

Function SelectItem(ByVal item As Object, ByVal comboBox As ComboBox) As Boolean
  If Not comboBox.Items.Contains(item) Then
    comboBox.Items.Add(item)
  End If

  comboBox.SelectedItem = item

  Return True
End Function

"item" パラメータはClassString のように any にすることができますが、 (custom) にすることもできますStructure

パラメータがNothing(またはデフォルトの構造体値) の場合、このメソッドは を返す必要がありFalseます。どうすればこの条件を達成できますか?

' This will not work, because "=" can't be used with classes
If item = Nothing Then Return False

' Won't work either, because "Is" is always False with structures
If item Is Nothing Then Return False

' Obviously this would never work
If item.Equals(Nothing) Then Return False

' Tried this too, but no luck :(
If Nothing.Equals(item) Then Return False

この状態をどのように処理すればよいですか? を使用できますTry ... Catchが、もっと良い方法があるはずです。

4

2 に答える 2

3

この関数はトリックを行います:

Public Function IsNullOrDefaultValue(item As Object) As Boolean
    Return item Is Nothing OrElse (item.GetType.IsValueType Andalso item = Nothing)
End Function

変数を渡して結果をテストします。

Dim emptyValue As Integer = 0          ==> True
Dim emptyDate As DateTime = Nothing    ==> True
Dim emptyClass As String = Nothing     ==> True
Dim emptyStringValue As String = ""    ==> False
Dim stringValue As String = "aa"       ==> False
Dim intValue As Integer = 1            ==> False
于 2012-11-21T14:38:13.337 に答える
0

どの条件で True/False を返したいのかよくわかりませんでしたが、このコードは、型を確認して特定の値と比較する方法を示しています。このようにして、値が間違った型である場合にそれを値と比較しようとしません。

If (TypeOf myVar is MyClass andalso myVar isnot nothing) _
    OrElse TypeOf myVar is MyStructure AndAlso myVar = MyStructure.DefaultValue) Then
    ...
End If
于 2012-11-21T14:45:25.507 に答える