分類:[.NET 全般]
2007/07/18(Wed) 08:55:30 編集(投稿者)
CTypeの第2引数 "Object (As Type)" の指定方法について教えてください。
環境は、VB2005, WinFormです。
DataRowを処理するプログラムにおいて、とある事情でRowStateを使わずに項目を1つずつOriginalと比較して変更有無を検出しています。
以下がそのコードです。
Dim isChanged As Boolean = False
Dim row As DataSet1.Table1Row
For Each column As DataColumn In DataSet1.Table1.Columns
If row(column.ToString, DataRowVersion.Current) <> row(column.ToString, DataRowVersion.Original) Then '※
isChanged = True
Exit For
End If
Next
※行で、row(idx)はObjectを返すので
「Option Strict On では、演算子 '<>' に対して Object 型のオペランドを使うことはできません。オブジェクト ID をテストするには、'Is' 演算子を使用してください。」
というコンパイルエラーになります。
しかしIsやIsNotを使って比較すると、両辺のrow(idx)の値(例えばString)が同一であるにも関わらずオブジェクト同士はIsNotだ、と返ってくる場合があります。
これは、CTypeで両辺をColumnの型(Stringなど)に変換した上で<>演算子で比較する必要があるのかと思いました。
そこでそのCTypeの書き方なのですが、
CType(row(column.ToString, DataRowVersion.Current), XXX)
このXXXに何を書けばよいのでしょうか?Columnの型はString以外もあるので、決め打ちができません。
column.GetTypeとしても「型 column.gettypeが定義されていません」というエラーになりました…
#訂正
※行で、row(idx)はObjectを返すので
※行で、row(columnName As String, version As System.Data.DataRowVersion)はObjectを返すので