- 題名: 同じ変数型にキャスト
- 日時: 2011/10/19 2:51:27
- ID: 29253
- この記事の返信元:
- (なし)
- この記事への返信:
- [29254] Re[1]: 同じ変数型にキャスト2011/10/19 7:18:40
- ツリーを表示
■No29254に返信(shuさんの記事)
こんな書き方があったとは…
提示した関数がSharedなのは、Class CommonDialog内で宣言していて、
いろんなクラスで使いまわすことを想定しているからです。
教えていただいた方法を使って以下のように書き直しました。
Public Shared Function ChangeValue(Of T)(ByVal _itemKind As String, ByVal _itemValue As T) As T
Dim beforeValue As String = CType(CObj(_itemValue), String)
Dim title As String = _itemKind & "の値を変更します。"
Dim body As String = "新しい値を入力してください。" & vbNewLine & "以前の値 -> " & beforeValue
Dim newValue = InputBox(body, title, beforeValue)
If newValue = "" Then
newValue = beforeValue
End If
Return CType(CObj(newValue), T)
End Function
最初の(Of T)はジェネリッククラスというやつでしょうか。
CObj()関数は、オブジェクト型にキャストする関数ですね。
全く知らなかった記述法だったので、とても勉強になりました。
本当にありがとうございました。
分類:[.NET]
VB2010を使っています。 変数Aと変数Bがあるとき、 変数Aの型を調べて、 変数Bを変数Aと同じ型にキャストするにはどうしたら良いのでしょうか。 Public Shared Function ChangeValue(ByVal _itemValue As Object) As Object Dim title As String = "値の変更" Dim body As String = "新しい値を入力してください。" Dim newValue As String = InputBox(body, title, CType(_itemValue, String)) Return CType(newValue, <ここで_itemValueと同じ型にキャストして返したい>) End Function Type.GetTypeCodeやTypeNameなどで型をしらべても、 Ctypeの第二引数に入れるための型を作る方法がわかりません。 select文で以下のようにするのはさすがに違う気がします…… Select Case TypeName(_itemValue) Case "Integer" Return CType(_itemValue, Integer) Case "String" Return CType(_itemValue, String) End Select