C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 15 を表示中)
■5548 / )  CTypeの第2引数 "Object (As Type)"
□投稿者/ まんぼう (3回)-(2007/07/18(Wed) 08:39:32)

分類:[.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を返すので

返信 編集キー/


管理者用

- Child Tree -