オブジェクトと文字や数字の比較はオブジェクト

これの続き とりこびとさん が乗っ取られた!! [Option SortOf]

とりこびとさんからの脅迫が怖かったので、MSDNオフライン中にVirtualPCを起動してコードを書いてました。(それをみた ひろえむさん から変な顔をされたw)
で、今日も微妙に時間がないのでコードの説明は特になし。(コメントにいろいろ書いときましたが)わからなかったらコメント欄に質問ください。

Dim Items() = { New With {.Name = "かるあ" }, _
New With {.Name = "???" } }
Dim ItemType = New With {.Name = "" }

' Object と 何かを比較する場合
' コンパイル時には Object として評価される。
Dim obj1 As Object = 1
Dim result0 = obj1 > 1
Console.WriteLine("Result0 Type =" & result0.GetType().Name)
' 実行時は Boolean で評価されている
' Result0 Type = Boolean

' 遅延バインドされたプロパティも
' コンパイル時には Object として評価される。
Dim obj2 As Object = New With {.Name = "かるあ"}
Console.WriteLine("obj2.Name Type=" & obj2.Name.GetType().Name)
' 実行時は String で評価されている
' obj2.Name Type = String

' 遅延バインド:警告
' 暗黙の型変換:警告
' item.Name の型が Object なので
' item.Name = "かるあ" の結果は Object
Dim query0 = From item In Items Where item.Name = "かるあ"

' 遅延バインド:警告
' Where の型は Func(Of Object, Boolean) なので
' Boolean で結果を返す。
Dim query1 = From item In Items _
Where Convert.ToBoolean(item.Name = "かるあ")

' 型指定をして比較する。
Dim query2 = From item In Items _
Where item.Name.ToString() = "かるあ"

' 警告なし。
Dim query3 = From item In Items _
Where Cast(item, ItemType).Name > "かるあ"

匿名型のキャストにはこれを使う

Public Shared Function Cast(Of T)(ByVal AnonymouseObject As Object, ByVal TargetType As T) As T
Return DirectCast(AnonymouseObject, T)
End Function

警告具合がわかるように画像でもどうぞw

画像

もうひとつ画像を

画像