36

私は .NET を初めて使用し、PHP での作業に慣れています。foreachオブジェクトの辞書を介して反復処理する必要があります。私のセットアップはMVC4アプリです。

モデルは次のようになります。

public class TestModels
{
    Dictionary<int, dynamic> sp = new Dictionary<int, dynamic>
    {
        {1, new {name="abc", age="1"}},
        {2, new {name="def", age="2"}}
    }
}

コントローラ:

public class TestController : Controller
{
   Models.TestModels obj = new Models.TestModels();
}

objオブジェクトをループして辞書の値を取得し、ビューに出力するにはどうすればよいですか?

4

4 に答える 4

55

1 つの方法は、辞書のキーをループすることです。これをお勧めします。

foreach(int key in sp.Keys)
    dynamic value = sp[key];

もう 1 つの方法は、ペアのシーケンスとして辞書をループすることです。

foreach(KeyValuePair<int, dynamic> pair in sp)
{
    int key = pair.Key;
    dynamic value = pair.Value;
}

最初のアプローチをお勧めします。たとえば、キーの昇順でアイテムを取得するのに役立つKeysなど、適切な LINQ ステートメントでプロパティを装飾すると、取得されるアイテムの順序をより細かく制御できるためです。内部でハッシュ テーブルデータ構造を使用することにsp.Keys.OrderBy(x => x)注意してください。したがって、2 番目の方法を使用する場合、アイテムの順序は簡単には予測できません。Dictionary

更新 (2016 年 12 月 1 日)var :答えをより明確にするために s を実際の型に置き換えました。

于 2013-02-06T01:17:15.553 に答える
4

それはあなたが辞書で何を求めているかによって異なります

Models.TestModels obj = new Models.TestModels();

foreach (var keyValuPair in obj.sp)
{
    // KeyValuePair<int, dynamic>
}

foreach (var key in obj.sp.Keys)
{
     // Int 
}

foreach (var value in obj.sp.Values)
{
    // dynamic
}
于 2013-02-06T01:19:02.290 に答える
1

このようにできます。

Models.TestModels obj = new Models.TestModels();
foreach (var item in obj.sp)
{
    Console.Write(item.Key);
    Console.Write(item.Value.name);
    Console.Write(item.Value.age);
}

あなたが現在抱えている可能性が最も高い問題は、コレクションがプライベートであることです。この行の先頭にpublicを追加すると

Dictionary<int, dynamic> sp = new Dictionary<int, dynamic> 

コントローラー内の関数からアクセスできるはずです。

編集TestModels:完全な実装の機能例を追加します。

クラスTestModelsは次のようになります。

public class TestModels
{
    public Dictionary<int, dynamic> sp = new Dictionary<int, dynamic>();

    public TestModels()
    {
        sp.Add(0, new {name="Test One", age=5});
        sp.Add(1, new {name="Test Two", age=7});
    }
}

おそらくdynamicキーワードについても読みたいと思うでしょう。

于 2013-02-06T01:20:17.880 に答える
0
public class TestModels
{
    public Dictionary<int, dynamic> sp = new Dictionary<int, dynamic>();

    public TestModels()
    {
        sp.Add(0, new {name="Test One", age=5});
        sp.Add(1, new {name="Test Two", age=7});
    }
}
于 2016-09-21T19:36:37.647 に答える