Dictionaryクラスの使い方を教えてください。

タグの編集
投稿者 シン  (社会人) 投稿日時 2011/3/27 02:34:13
Dictionaryクラスの使い方でつまずいています。VB2010使用です。
コードは以下ですが、4行目で「宣言が必要です」とのエラーが出現してしまいます。

Imports System.Collections.Generic
Public Class MyDictionary
    Public dict As New Dictionary(Of String, String)
    dict.add("001","aaa")
End Class

このように「MyDictionary」クラスを作成して、Addメソッドを用いて数百のキーと値を追加したいと考えています。そのあとは、以下のようにして

Private item As MyDictionary
id = item.dict ("001")

idにaaaという値を代入したいと考えています。

3行目でdictを宣言しているつもりですが、4行目でdictの「宣言が必要です」と言われてしまいます。
一体どうすればいいのでしょうか。
投稿者 るきお  (社会人) 投稿日時 2011/3/27 11:56:21
Dictionaryクラスの使い方の前にVBとして構文がすごくおかしいです。
dict.add("001","aaa")のような操作はFunction~End Function、Sub ~ End Sub, Property ~ End Propertyの間に書かなければならず、シンさんのプログラムでは明らかな構文エラーです。

クラスの作り方は初級講座第46回「クラスの作成」で紹介していますので、ぜひ参照してください。
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard46.htm

>3行目でdictを宣言しているつもりですが、4行目でdictの「宣言が必要です」と言われてしまいます。
「宣言が必要です」の意味は下記で説明されています。
http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=JA-JP&k=k(VBC30188);k(VS.ERRORLIST);k(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22)&rd=true

今回は、「非宣言ステートメントをプロシージャの本体に移動します。」に合致します。
つまり、冒頭に書いたようにここは宣言を書く場所であって、操作のプログラムは書くことができないという意味です。『この場所には操作のプログラムではなく、宣言を書く必要があります。』と受け取るとよいと思います。

シンさんのやりたいことにできるだけ近づけようとするとプログラムは以下のようになります。
  
Imports System.Collections.Generic
Public Class MyDictionary
    Public dict As New Dictionary(Of StringString)

    Public Sub New()
        dict.Add("001""aaa")
        dict.Add("002""bbb")
        dict.Add("003""ccc")
        '… 
    End Sub

End Class


この場合、次のようにして値を取得することができます。
  
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click

        Dim id As String
        Dim item As New MyDictionary

        id = item.dict("001")

        MsgBox(id)

    End Sub
End Class


Private item As MyDictionary
id = item.dict ("001")

このコードにもいろいろ問題があり、どのようなクラスを作成してもこのコードのような呼び出し方はできません。
その理由
・MyDictionaryがNewされていないので、この状態ではitemのプロパティは呼び出せない。
・id = item.dict("001")のような操作はFunction~End Function、Sub ~ End Sub, Property ~ End Propertyの間に書かなれければいけないが、Private item As MyDictionaryという宣言はそれらの間に書くことができず、要するにこの2行を続けて書くことはありえない。
投稿者 シン  (社会人) 投稿日時 2011/3/27 21:57:10
るきお様

ご指導していただきありがとうございます。
クラスについてあらためて勉強させていただき、無事に解決することができました。