迭代遍历List
12 浏览
0 Comments

迭代遍历List

如何遍历类型为Object的List?\n

List countries = new List();
countries.Add(new { Name = "美国", Abbr = "US" , Currency = "美元"});
countries.Add(new { Name = "加拿大", Abbr = "CA", Currency = "美元" });
...更多

\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);
}

0
0 Comments

在上述代码中,问题是我们需要对一个对象列表进行迭代,以获取每个对象的属性值。具体来说,我们需要从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属性值。

0
0 Comments

从上面的对话中可以看出,问题出现的原因是在使用foreach循环遍历List<object>的时候,无法识别object的属性。解决方法是创建一个自定义的Country类,具有所有需要的属性,并将List<object>替换为List<Country>

具体的解决步骤如下:

1. 在控制器中创建一个自定义的Country类,包含Name等属性。

2. 在控制器中使用Country类创建一个List<Country>对象,并设置其属性。

3. 创建一个ViewModel对象,并将List<Country>赋值给ViewModelCountries属性。

4. 将ViewModel对象作为参数传递给ViewPartialView方法。

具体代码如下所示:

// 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>时无法识别属性的问题。

0
0 Comments

在上述代码中,我们创建了一个名为"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"属性。

0