1

このようなもの:

Dictionary<int, string> myData = new Dictionary<int, string>();
myData.Add(1, "England");
myData.Add(2, "Canada");
myData.Add(3, "Australia");
myTreeView.Node[0].Tag = myData;

次に、このオブジェクトを取得したいのですが、どうすればよいですか? お気に入り:

string str = new string();
str = myTreeView.Node[0].Tag[2]; // "str" should be equal to "Canada"
myTreeView.Node[0].Tag[1] = "Spain";
str = myTreeView.Node[0].Tag[1]; // now "str" is equal to "Spain"

2 番目の質問 - この式を返すもの:

Dictionary<int, string> myData = new Dictionary<int, string>();
myData.Add(1, "England");
myData.Add(2, "Canada");
myData.Add(3, "Australia");

string str1 = new string();
str = myData[4]; // there isn't such a key as 4

例外または null ?

4

3 に答える 3

3

Control.Tagとして入力されるため、 :objectとしてアクセスするにはキャストする必要があります。Dictionary<int, string>

Dictionary<int, string> dict = (Dictionary<int, string>)myTreeView.Node[0].Tag;
string str = dict[2];

同様に、値を設定します。

var dict = (Dictionary<int, string>)myTreeView.Node[0].Tag;
dict[1] = "Spain";

存在しないキーにアクセスしようとすると、KeyNotFoundExceptionがスローされます。TryGetValueまたはを使用して、辞書に特定のキーが含まれているかどうかを確認できますContainsKey

if(dict.ContainsKey(key))
{
    var value = dict[key];
}
else
{
}

TryGetValueはルックアップを実行し、指定された変数を1回の呼び出しで値(存在する場合)に設定するため、通常は推奨されます。

string value;
if(dict.TryGetValue(key, out value))
{
    //use value
}
else { ... }
于 2012-08-02T20:10:43.323 に答える
1

例外または null ?

自分で試してみるか、ドキュメントを読んでください(例外がスローされます)。

また、コードは投稿どおりにコンパイルされません。 Tag任意のデータをオブジェクトに関連付ける方法です。その結果、その型はobjectであるため、使用する前にキャストする必要があります。

プロパティを使いすぎてコードが扱いにくくなった場合Tagは、デフォルトTreeNode(またはそれが何であれ) から継承する独自のノード タイプを作成し、代わりにそのタイプのオブジェクトをツリー ビューに取り込むことをお勧めします。

于 2012-08-02T20:09:48.160 に答える