• 締切済み

オブジェクト型の変数同士の値の等価比較方法

VB.NETにおいて、オブジェクト型の変数同士の値が同じかどうかチェックする方法を教えてください。 Dim a As Object = 1.0 Dim b As Object = DBNull.Value ・・・ If a = b Then ' 同じ Else ' 違う EndIf 上記のようなことをしたいのですがエラーになります。よろしくお願いします。

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

どのようなコトしたいのか、いまひとつわからないために適切な回答ではないかもしれませんが・ とりあえず Dim a As Object = 1.0 Dim b As Object = DBNull.Value If a.Equals(b) Then Console.write("等しい") Else Console.write("等しくない") End If のように書くことはできます。 質問文のようにしたらエラーになるのは、 型の違うもの同士を等値判定しようとして、それぞれの型にキャスト(変換)をしようとするが、キャストできないので、エラーになります。 通常、オブジェクトの等値については、それぞれのオブジェクトで判定するメソッドをオーバーライドしたり、キャストについて定義しておく必要があります。 また、型が違えば、等値かどうかというのは、大抵の場合無意味です。 Object 型は、何でも入れる(ボクシング)ことができますが、 使うときには、それぞれの型に明示的にキャスト(アンボクシング)する必要があります。

pokopokoponta
質問者

お礼

有難うございます。 Equalsで比較するようにしました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Vb .net オブジェクトの属性に応じて値を変え

    Vb .net オブジェクトの属性に応じて値を文字列に加工して渡したいです。 DataTableのセルやStringやIntegerやdateなどの値が渡されることを想定しています。 postgresqlのWhere句に渡す事を想定しています。 strTmp = TestTest(Object1) strSql = "Where item1 = " & strTmp <内容> ・オブジェクトの値がDBNull.Valueなら文字列で"null" ・数字属性の場合、  文字列に変換して数字を渡す ・日付属性の場合、  文字列に変換して値を渡す ・文字属性の場合、  シングルクオートした値を渡す。 ・上記以外は文字列で"null"を渡す。 <書きかけ> function TestTest(byref p01 Object) As String dim aaaa as object dim bbbb as string if aaaa is DBNull.Value then bbbb = "null" else Select Case aaaa 属性 Case 数字の場合 bbbb = aaaa.toString Case 文字の場合 bbbb = "'" & aaaa.toString & "'" Case 日付の場合 bbbb = "'" & to_timestamp('" & Format( aaaa, "yyyy.mm.dd hh:nn:ss" ) & "', 'YYYY.MM.DD HH24:MI:SS')" Case Else bbbb = "null" End Select end if Return (bbbb) end function <メモ> ・属性の判定方法が分かりません。 ・何か見落としている事はありませんか? 以上、よろしくお願いします。

  • 変数の値について

    変数の値について教えてください。 VB2010 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim A As Single A = 2.0 MsgBox(A) End Sub 上記のプロシジャを実行するとメッセージボックスに2と表示され 2.0と表示しません。 2.0と表示させるには、どのようにすればよいなでしょうか。

  • 配列の値を渡す

    (VB.NET2003) Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click Dim a(0) As Integer ・・・略 IF ・・・ a(0) = 1 ←"この値をピクチャーボックス2へ渡す" ・・・略 End Sub Private Sub PictureBox2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox2.Click Dim b(0) As Integer ・・・略 IF ・・・ b(0) = 1 IF b(0) >= a(0) Then ←"ココにa(0)の値を渡す" このプログラムは深く考えなくていいです。 IF文を使ってるから・・・など。 ・・・略 End Sub 上記の通り、ピクチャーボックス1、a1(0)の値を、 ピクチャーボックス2の処理にa(0)の値を渡す"プログラム"を教えてください┏○

  • マクロ オブジェクト変数Withブロック変数エラ-

    以前、こちらでインターネット上の窓にエクセルの数値を自動で入れたいと言う質問をさせて頂きました。http://okwave.jp/qa/q7676012.html VBAを利用したらどうかと教えていただき、マクロをその後、勉強し動いて感動しました。 クロネコの宅急便サイトで応用しようと試みたのですが、「オブジェクト変数またはWithブロック変数が設定されてません。」とエラーが出ます。 同じ仕組みだと思うのですが何がいけないんでしょうか? Dim myWindow As Object Dim myUrl As String myUrl = "http://toi.kuronekoyamato.co.jp/cgi-bin/tneko?init For Each myWindow In CreateObject("Shell.Application").Windows With myWindow If .LocationURL = myUrl Then .document.getElementById("text1").value = Range("A1").value .document.getElementById("text2").value = Range("A2").value .document.getElementById("text3").value = Range("A3").value .document.getElementById("text4").value = Range("A4").value .document.getElementById("text5").value = Range("A5").value Exit For End If End With Next myWindow

  • 2つ以上の変数を比較して最大数を求めたい

    Sub 最大数() Dim a As Long Dim b As Long Dim c As Long a = 10 b = 20 c = 30 ここで変数を比較するコード MsgBox "a,b,cの中で一番大きな数は です" End Sub のように変数を比較して、最大数を求めたいのです。 2つなら If a > b Then で結果を取得すればいいですが、 3つや4つやそれ以上になった時に、応用を利かせるため質問しました。 よろしくお願いします。

  • VB6にて文字型変数の内容をオブジェクト変数に代入する方法

    VB初心者ですが オブジェクト変数に文字型変数で作成した オブジェクト名を代入したいのですが 上手くいきません。 Dim anyCmb As ComboBox Dim cmb_name As String cmb_name = "ABC" Set anyCmb = cmb_name 誰かわかる方がいましたら、教えてください。 よろしくお願いします。

  • 変数に入った値を追加したい

    Access97を使用しています。SQLで変数に入った値を追加したいのです。 Dim strSQL, NO3, NO2 As String Dim i As Integer Dim db As DATABASE Dim SN As Variant If (C_Flag = 0) Then SN = 0 Else SN = 1 End If strSQL = "INSERT INTO 連続印刷 (Nフラグ" strSQL = strSQL & ") VALUES (" strSQL = strSQL & "', 'SN'" strSQL = strSQL & ")" Set db = CurrentDb() db.Execute strSQL Set db = Nothing End Sub 上記のようにすると、"SN"のデータが入ります。 'SN'をSNのようにすると、パラメータが少なすぎますと出てきます。 どうすれば、上記 0や1の値を取得することができるのでしょうか?

  • セル指定の文字列を、直接ではなく変数にしたい。

    ExcelのVBEなのですが、以下のようなコードがあります。 If Range("c_Reporter").Value = "" Then   <省略> Range("c_Reporter").Activate EndIf c_Reporterという名前のセルの値を見て、このセルに操作を行うのですが、セルの名前をいちいち書くのが面倒です。 たとえば、以下のようにセル名を格納した変数を使いまわしたいのですが、エラーになってしまいます。何か指定の方法があったように思うのですが、オンラインヘルプで探せませんでした。 Dim sTargetCell As String sTargetCell="c_Reporter" If Range(sTargetCell).Value = "" Then   <省略> Range(sTargetCell).Activate EndIf このような変数の遣い方のやり方を教えてください。 また、もっとスマートなやり方でも結構です。

  • VBA オブジェクトが空かどうか判定する

    皆様のお知恵を拝借させてください。 エクセルVBAでオブジェクトを入れる変数を定義し、その変数にオブジェクト が入っているかどうか検査したいのですがどうしたらいいでしょうか。 例えば--- Dim a As Workbook If a <> nothing then ←この部分が分からない。このままだとエラー。 処理 End if --------- 環境 エクセル2003 WinXPsp1

  • マクロに関するエラー(オブジェクトが必要です。)

    マクロは始めてで、いろいろ調べながら作ってみたのですが、 Set検索値の行でオブジェクトが必要ですというエラーが出て、 先に進めなくなりました。 申し訳ないのですが、何方かエラーの対処法を教えていただけないでしょうか。 よろしくお願いします。 ========================== Sub test() Worksheets("2月分").Activate Dim 検索値 As Integer Set 検索値 = Worksheets("2月分").Cells(4, 18) Worksheets("テスト").Activate Dim B As Range Dim C As Range For Each B In Range("B13,B413") ' 第一条件 If B.Value >= 検索値 Then GoTo Continue End If ' 第二条件 If B.Offset(0, 1).Value < 検索値 Then ' Offset(0, 1) は B列の隣のC列の値を取得 GoTo Continue End If Dim aValue As String aValue = B.Offset(0, 2).Value Worksheets("2月分").Cells("D19").Value = aValue Continue: Next End Sub