迭代收集并在Razor中打印索引和项目

Ren*_*ene 3 asp.net-mvc razor asp.net-mvc-3

我的剃刀视图有问题.我有以下内容:

public ICollection<Topic> Topics

public class Topic
{
    public string Description { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想遍历集合并打印出如下结果:

    @foreach (int index in Enumerable.Range(0, Model.Topics.Count())){

        <div>@(index). Model.Topics[@(index)].Description"</div>
    }
Run Code Online (Sandbox Code Playgroud)

问题是我得到的只是:

0. Model.Topics[0].Description"
1. Model.Topics[1].Description"
Run Code Online (Sandbox Code Playgroud)

我尝试了各种各样的东西,但仍然无法得到描述.

我究竟做错了什么 :-(

Dar*_*rov 13

试试这样:

@foreach (var item in Model.Topics)
{
    <div>@Model.Topics.IndexOf(item). @item.Description</div>
}
Run Code Online (Sandbox Code Playgroud)


gid*_*eon 7

这应该工作:

@{int i = 0;}
@foreach (Topic tp in Model.Topics){
    <div>@(i++).ToString() @tp.Description</div>
}
Run Code Online (Sandbox Code Playgroud)

你在做什么试图使用foreach像for循环.(可能就像一个C++迭代器?)然而,foreach是语法糖,它可以为你完成所有的工作.

在C#foreach循环中对类型集合进行循环.所以如果你有:

int[] numbers = new int[] {1,2,3,4};
Person[] persons = //collection of persons
Run Code Online (Sandbox Code Playgroud)

循环将是:

foreach(int n in numbers) { /*n would be each of the numbers*/  }
foreach(Person p in persons) 
    {/* p here would refer to each person per iteration*/ }
Run Code Online (Sandbox Code Playgroud)

适用于任何IEnumerable(IList,Arrays,Collections等)