トップ回答者
動的配列 List の使い方

質問
回答
-
念のために、Dictionaryクラスをご紹介しておきます。
(参考)
ハッシュテーブル(連想配列)を使うには?(Dictionaryクラス編)[2.0のみ、C#、VB]
http://www.atmarkit.co.jp/fdotnet/dotnettips/429dictionary/dictionary.html★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク バットマン4481 2015年4月21日 10:50
すべての返信
-
標準のListクラスにはそのようなジェネリック定義はないので出来ません。
ですが、継承することで拡張することは可能です。Module Module1 Sub Main() Dim list As New List(Of String,Integer) list.Add("あ1" , 1) list.Add("い1" , 1) list.Add("い2" , 2) End Sub End Module Class StIn(Of T1, T2) Sub New() End Sub Sub New(ByVal v1 As T1, ByVal v2 As T2) Me.Value1 = v1 Me.Value2 = v2 End Sub Public Property Value1 As T1 Public Property Value2 As T2 End Class Class List(Of T1, T2) Inherits List(Of StIn(Of T1, T2)) Public Overloads Sub Add(ByVal v1 As T1, ByVal v2 As T2) Me.Add(New StIn(Of T1, T2)(v1, v2)) End Sub End Class
StInクラスを作っていますが、Tuple(of T1,T2...)というクラスを使うことも可能です。個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
-
念のために、Dictionaryクラスをご紹介しておきます。
(参考)
ハッシュテーブル(連想配列)を使うには?(Dictionaryクラス編)[2.0のみ、C#、VB]
http://www.atmarkit.co.jp/fdotnet/dotnettips/429dictionary/dictionary.html★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク バットマン4481 2015年4月21日 10:50
-
拡張メソッドを作ってあげるのでもいい気がします。
Module Module1 Sub Main() Dim si = New List(Of StIn) si.Add("あ", 1) End Sub End Module Class StIn Public Property Value1 As String Public Property Value2 As Integer End Class Module StInExtension <System.Runtime.CompilerServices.Extension()> Public Sub Add(source As List(Of StIn), value1 As String, value2 As Integer) source.Add(New StIn With {.Value1 = value1, .Value2 = value2}) End Sub End Module
-
1970年代Fortranでプログラミングしてた者です。最近の言語(VB.NET等)には驚きます。まず習得しずらい、趣味でVB.NETを書籍で独学していますが、書店にでている本で習得するのはかなり難しいと思います。
Class StIn(Of T1,T2)の構文は、説明のコーディングで理解できました。この構文は書店に並べられている本には、ほとんど書かれていないと思います。次に、
Class List(Of T1,T2)
Inherits List(Of StIn(Of T1,T2)) 継承ですが、List(Of StIn(Of T1,T2))のインスタンスをクラス内で保持させる方法が、直感的に思いつきますが、クラスであるList(Of StIn(Of T1,T2))はコンパイラーの方で作ってくれるのですか。
最近の言語の特徴は、ユーザー定義型と参照の方法だと思いますが、なにかSQLに似ています。、Addメソッドのオバーロードですが、たまたま同じシグネチャーがあった場合、オバーロードのオーバーライドすればよいのですか初歩的なことですが。このプログラムの説明でなんとか理解できました。
-
クラス名(Of T1,T2)の構文がどういう指示をだしているのかということです。
最終的なゴールとしてどこを目指しておられるかイマイチ判然としませんが、ジェネリックについては、以下の記事が参考になるのではないでしょうか?
StIn(Of T1,T2)とList(Of T1,T2)は、パターン的なのでコンパイラーの方で作ってもらうことにすればよいように思われます。
コンパイラは上記 List(Of String,Integer,String) のコードから二つのクラス StIn(Of T1,T2) と List(Of T1,T2) を生成することはありません。また List(ジェネリック型) で指定できる型パラメータは一つだけです。またなにをもって「パターン」と言われてるかも不明です。何か根本的に勘違いされてるように思います。
ぜひ 「フォーラムでご質問頂くにあたっての注意点」 もご覧ください https://social.msdn.microsoft.com/Forums/ja-JP/ca9ecfb7-4407-4fcb-b8bd-207d68257e68?forum=announceja
- 編集済み ひらぽんModerator 2015年4月24日 6:26