迭代遍历List
迭代遍历List
如何遍历类型为Object的List?\n
List
\n我想在我的视图中使用属性名做一些类似的操作:\n@model ViewModel\n@foreach(object country in Model.Countries)\n{\n Name = country.Name\n Code = country.Abbr\n Currency = country.Currency\n}\n
\n更新:\n忘记提到我正在使用MVC,我希望在视图中循环数据。Countries对象是ViewModel的一个属性,视图是强类型的。\n更新:\n根据要求更新,展示如何从控制器调用视图:\n
[HttpPost] public ActionResult Index(FormCollection form) { ..一些验证和一些逻辑 ViewModel myViewModel = new ViewModel(); myViewModel.Countries = GetCountries(); -- 这是数据初始化的地方 myViewModel.Data = db.GetData(); return PartialView("_myPartial", myViewModel); }
在上述代码中,问题是我们需要对一个对象列表进行迭代,以获取每个对象的属性值。具体来说,我们需要从countries列表中迭代出每个对象的Name属性,并将其添加到一个新的字符串列表names中。
出现这个问题的原因是我们不能直接在foreach循环中迭代一个匿名对象列表,因为匿名对象没有明确的类型名称,无法使用foreach循环进行迭代。因此,我们需要找到一种解决方法来完成这个任务。
解决这个问题的方法是将匿名对象转换为具有明确类型的对象列表。在上面的示例代码中,我们可以使用ToList()方法将countries列表转换为一个List对象,其中每个元素都是一个具有Name、Abbr和Currency属性的匿名对象。然后,我们可以使用ForEach()方法迭代List对象,并将每个对象的Name属性添加到names列表中。
下面是修正后的代码示例:
var countries = (new[] { new { Name = "United States", Abbr = "US", Currency = "$" }, new { Name = "Canada", Abbr = "CA", Currency = "$" }, }).ToList(); List<string> names = new List<string>(); countries.ForEach(x => { names.Add(x.Name); });
通过将匿名对象转换为具有明确类型的对象列表,我们成功解决了在foreach循环中迭代匿名对象列表的问题,并且能够获取每个对象的属性值。现在,我们可以在names列表中获取到countries列表中每个对象的Name属性值。
从上面的对话中可以看出,问题出现的原因是在使用foreach
循环遍历List<object>
的时候,无法识别object
的属性。解决方法是创建一个自定义的Country
类,具有所有需要的属性,并将List<object>
替换为List<Country>
。
具体的解决步骤如下:
1. 在控制器中创建一个自定义的Country
类,包含Name
等属性。
2. 在控制器中使用Country
类创建一个List<Country>
对象,并设置其属性。
3. 创建一个ViewModel
对象,并将List<Country>
赋值给ViewModel
的Countries
属性。
4. 将ViewModel
对象作为参数传递给View
或PartialView
方法。
具体代码如下所示:
// Country类 public class Country { public string Name { get; set; } public string Abbr { get; set; } public string Currency { get; set; } } // 控制器 public ActionResult YourAction() { ViewModel myModel = new ViewModel(); List<Country> countries = new List<Country>(); countries.Add(new Country { Name = "United States", Abbr = "US", Currency = "$" }); countries.Add(new Country { Name = "Canada", Abbr = "CA", Currency = "$" }); myModel.Countries = countries; return View(myModel); } // 视图 @model ViewModel @foreach (Country country in Model.Countries) { var Name = country.Name var Code = country.Abbr var Currency = country.Currency } // ViewModel类 public class ViewModel { public List<Country> Countries { get; set; } }
通过以上步骤,可以解决在使用foreach
循环遍历List<object>
时无法识别属性的问题。
在上述代码中,我们创建了一个名为"countries"的数组,其中包含了两个对象,每个对象都有一个名为"Name"的属性。然后,我们使用foreach循环来迭代遍历数组中的每个对象。
然而,问题出现在我们试图访问每个对象的"name"属性时。由于我们在循环中使用了小写的"name"作为变量名,这与对象中的属性名"Name"不匹配。因此,在循环中的代码将无法正确访问对象的属性。
为了解决这个问题,我们需要将循环中的代码调整为正确访问对象属性的方式。我们可以将循环中的变量名改为与对象中的属性名相匹配,即将"Name"改为"name"。这样,循环中的代码将能够正确访问对象的属性,并执行所需的操作。
修正后的代码如下所示:
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; ..... }
通过对代码的修正,我们成功解决了循环中无法访问对象属性的问题。现在,循环将按照预期的方式迭代遍历数组中的每个对象,并正确访问对象的"name"属性。