2011-07-05 17 views
69

同じプロセスを実行するたびに異なるオブジェクトを使用するために、さまざまなオブジェクトをサブルーチンに渡しています。たとえば、あるケースではListViewを使用しており、別のケースではDropDownListを渡しています。オブジェクトが特定のタイプであるかどうかをチェックする方法

渡されるオブジェクトがDropDownListであるかどうかを確認したい場合は、それがある場合はコードを実行します。これはどうすればいいですか?

私のコードは、これまでに動作しない:VB.NETで

Sub FillCategories(ByVal Obj As Object) 
    Dim cmd As New SqlCommand("sp_Resources_Categories", Conn) 
    cmd.CommandType = CommandType.StoredProcedure 
    Obj.DataSource = cmd.ExecuteReader 
    If Obj Is System.Web.UI.WebControls.DropDownList Then 

    End If 
    Obj.DataBind() 
End Sub 

答えて

118

を、あなたは、オブジェクトのインスタンスの型を取得するためにGetType methodを使用する必要がある、とGetType() operatorはタイプを取得するために、別の既知のタイプのものである。

2つのタイプを取得したら、Is演算子を使用して簡単に比較できます。

だからあなたのコードは、実際にこのように記述する必要があります:あなたはまた、代わりにGetType方法のTypeOf operatorを使用することができます

Sub FillCategories(ByVal Obj As Object) 
    Dim cmd As New SqlCommand("sp_Resources_Categories", Conn) 
    cmd.CommandType = CommandType.StoredProcedure 
    Obj.DataSource = cmd.ExecuteReader 
    If Obj.GetType() Is GetType(System.Web.UI.WebControls.DropDownList) Then 

    End If 
    Obj.DataBind() 
End Sub 

。これは、オブジェクトがと互換性があり、指定された型のであるかどうかをテストします。同じ型ではありません。それは次のようになります。

If TypeOf Obj Is System.Web.UI.WebControls.DropDownList Then 

End If 

全く些細な、無関係なnitpickを:伝統的に、パラメータの名前がcamelCase形式されている(彼らは常に小文字で開始することを意味する).NETコードを書くとき(VB.NETまたはC#のいずれか)。これにより、クラス、タイプ、メソッドなどと一目で区別しやすくなります。

+1

ありがとうございました。私はそのコードを試しましたが、実際には唯一のことは '='演算子では動作しないということです。私はそれを 'Is'に変更しなければならなかった。 '='だったときのエラーは、 '' Operator '='が 'System.Type'と 'System.Type'の型に対して定義されていません。 – Leah

+1

@Leah:そうですね、すみません。私は答えを書くときにもっと注意を払う必要があるように見えます。 'TypeOf'はおそらく少なくともコードの可読性の面でもっと簡単なオプションです。私はその答えもその例で更新しました。 –

+0

ありがとう、それもあまりにも – Leah

関連する問題