4

How can I loop through a List of type Object?

List<object> countries = new List<object>();
countries.Add(new { Name = "United States", Abbr = "US" , Currency = "$"});
countries.Add(new { Name = "Canada", Abbr = "CA", Currency = "$" });
...more

I want to do something like (using property names) in my view

@model ViewModel
@foreach(object country in Model.Countries)
{
    Name = country.Name
    Code = country.Abbr
    Currency = country.Currency
}

UPDATE: Forgot to mention that I am using MVC and I want to loop the data in View. Countries object is one of the property of ViewModel to view is strongly typed.

UPDATE: updating as asked to show how View is called from the controller -

[HttpPost]
public ActionResult Index(FormCollection form)
{
..some validations and some logic
ViewModel myViewModel = new ViewModel();
myViewModel.Countries = GetCountries(); -- this is where data get initialized
myViewModel.Data = db.GetData();
return PartialView("_myPartial", myViewModel);
}

It means that if an error is generated by that function, it is not shown. It suppresses the error so to say. As the PHP manual states:

PHP supports one error control operator: the at sign (@). When prepended to an expression in PHP, any error messages that might be generated by that expression will be ignored.

Look here for more information: http://php.net/manual/en/language.operators.errorcontrol.php

4

6 に答える 6

8
var countries = new []{
        new { Name = "United States", Abbr = "US", Currency = "$" },
        new { Name = "Canada", Abbr = "CA", Currency = "$" }
    };

foreach(var country in countries)
{
      var Name = country.Name;
      .....
}
于 2012-09-26T16:22:50.377 に答える
3

私がよく理解していれば、ビューモデルをコントローラーからビューに送信しようとしています。したがって、かみそりを使用している場合、コードは次のようになります

@model ViewModel
@foreach(object country in Model.countries)
{
  var Name = country.Name
  var Code = country.Abbr
  var Currency = country.Currency
}

キーワードに注意してModelください。

編集

// Code inside your controller should be like this
ViewModel myModel = new ViewModel();
List<object> countries = new List<object>();
countries.Add(new { Name = "United States", Abbr = "US" , Currency = "$"});
countries.Add(new { Name = "Canada", Abbr = "CA", Currency = "$" });

myModel.countries = countries;

return View("yourView", myModel); // you can write just return View(myModel); if your view's name is the same as your action 

お役に立てば幸いです。

于 2012-09-26T16:54:45.710 に答える
3

国も匿名にする必要があります。

例として、次のようなもの

var countries = (new[] {
    new { Name = "United States", Abbr = "US", Currency = "$" },
    new { Name = "Canada", Abbr = "CA", Currency = "$" },
 });
 List<string> names = new List<string>();
 countries.ToList().ForEach(x => { names.Add(x.Name); });
于 2012-09-26T16:19:58.713 に答える
1

新しいクラスを作成し、ジェネリック オブジェクトの代わりにそれを使用します。ベース レベル オブジェクトを使用する必要がある理由はありますか? さらに抽象化が必要な場合は、Where 句で匿名型を利用するか、抽象クラスを使用できます。

于 2012-09-26T16:20:55.710 に答える
1

オブジェクトを定義した方法はdynamic、唯一の選択肢として残ります。2 つの匿名クラスは異なる型です。あなたはどちらかを書くべきです

foreach (dynamic country in countries) {
    ...
}

dynamicまたは、名前付きクラスのインスタンスでリストを初期化します (状況によっては重すぎる可能性があるため、これが推奨されます)。

于 2012-09-26T16:21:41.483 に答える
0

ポリモーフィック アイテムを何らかの方法で (匿名型ではなく) 操作したい場合は、Cast<...>.ToList() または OfType<...>.ToList() をご覧ください。

于 2012-09-26T16:21:56.150 に答える