はじめに
VB.netのジェネリック プロシージャなどで型で処理を分けたい場合がある
以下のようにしてすっきりと書きたいが上手くいかない。
これは使えない
Public Sub CheckType(Of T)(ByVal value As T)
Select Case TypeOf value
Case Integer
Console.WriteLine("Type is Integer")
Case String
Console.WriteLine("Type is String")
Case Else
Console.WriteLine("Type is Other")
End Select
End Sub
Select Case True
ネットで調べると以下の方法をよく見つかるが、こんな書き方をするぐらいならIf-ElseIf
でいいじゃないかと思う。(Select Caseで書くのメリットがない。。。)
Public Sub CheckType(Of T)(ByVal value As T)
Select Case True
Case TypeOf value Is Integer
Console.WriteLine("Type is Integer")
Case TypeOf value Is String
Console.WriteLine("Type is String")
Case Else
Console.WriteLine("Type is Other")
End Select
End Sub
GetTypeを使う
GetType
を使うことである程度すっきりと書ける
Public Sub CheckType(Of T)(ByVal value As T)
Select Case value.GetType()
Case GetType(Integer)
Console.WriteLine("Type is Integer")
Case GetType(String)
Console.WriteLine("Type is String")
Case Else
Console.WriteLine("Type is Other")
End Select
End Sub
もしくは
Public Sub CheckType(Of T)(ByVal value As T)
Select Case GetType(T)
Case GetType(Integer)
Console.WriteLine("Type is Integer")
Case GetType(String)
Console.WriteLine("Type is String")
Case Else
Console.WriteLine("Type is Other")
End Select
End Sub