C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 13 を表示中)
■3892 / )  IComparer使用時に値を取得する方法について
□投稿者/ うっちー (4回)-(2007/05/28(Mon) 11:32:21)

分類:[.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

返信 編集キー/


管理者用

- Child Tree -