|
分類:[.NET 全般]
VS Version:Visual Studio 2003 OS Windows XP
データを、ArrayList作成時にIComparerインターフェイスを使って並べ替えをする処理を作成しました。 その後、ArrayListに格納されている、あるインデックス値の値を取得したいのですが、 IComparerを使用した場合は、For等でインデックス値を進めて値を取得するしか方法はないのでしょうか? itemとインデックス値を直接指定して取得は出来ないのでしょうか? 試しに、下記のように指定してみましたが
AAA = CType(al_TEST.Item(2), String).ToString の処理にて
'System.InvalidCastException' のハンドルされていない例外が microsoft.visualbasic.dll で発生しました。 追加情報 : 型 'SortClass' から型 'String' へのキャストが有効ではありません。
とエラーが表示されてしまいました。 あつかましいとは、参考になるサイト等を紹介して頂きたいのですが皆様宜しくお願いします。
以下ソースです。 Option Strict On Option Explicit On
Module Module1 Sub Main() Dim sc As SortClass Dim mc As New MyComparer Dim count As Integer Dim al_TEST As New ArrayList
al_TEST.Add(New SortClass("項目A", "項目お", "項目2")) al_TEST.Add(New SortClass("項目B", "項目う", "項目4")) al_TEST.Add(New SortClass("項目C", "項目あ", "項目5")) al_TEST.Add(New SortClass("項目D", "項目い", "項目3")) al_TEST.Add(New SortClass("項目E", "項目え", "項目1"))
mc.Key = MyComparer.SortKey.OSUUJI al_TEST.Sort(mc)
For Each sc In al_TEST If count = 2 Then Console.WriteLine(sc.OEIJI & " , " & sc.OHIRAGANA & " , " & sc.OSUUJI) Exit For End If count += 1 Next
Dim AAA As String AAA = CType(al_TEST.Item(2), String).ToString End Sub
Public Class SortClass Public OEIJI As String Public OHIRAGANA As String Public OSUUJI As String
Public Sub New(ByVal scEIJI As String, ByVal scHIRAGANA As String, ByVal scSUUJI As String) OEIJI = scEIJI OHIRAGANA = scHIRAGANA OSUUJI = scSUUJI End Sub End Class
Public Class MyComparer Implements System.Collections.IComparer
Public Key As SortKey Public Enum SortKey OEIJI OHIRAGANA OSUUJI End Enum
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
Dim result As Integer Dim cx As SortClass = CType(x, SortClass) Dim cy As SortClass = CType(y, SortClass)
Select Case Key Case SortKey.OEIJI result = String.Compare(cx.OEIJI, cy.OEIJI) Case SortKey.OHIRAGANA result = String.Compare(cx.OHIRAGANA, cy.OHIRAGANA) Case SortKey.OSUUJI result = String.Compare(cx.OSUUJI, cy.OSUUJI) End Select
Return result
End Function End Class End Module
|