如何将索引号作为值添加到foreach中?

时间:2011-05-13 09:44:51

标签: c# asp.net

我有以下代码:

foreach (var SubTopic in Model.SubTopic.Description)
{
 <option value="xxx">SubTopic</option>
}

我想找到一种方法将索引号插入xxx作为值。 01表示第一个,02表示第二个选项行等。

有一种简单的方法吗?

3 个答案:

答案 0 :(得分:9)

使用像

这样的for循环
for (int i = 0; i < Model.SubTopic.Description.Count; i++)
    <option value="i">Model.SubTopic.Description[i]</option>

在C#中,您无法直接从foreach循环中访问实际索引。

答案 1 :(得分:2)

在循环外声明一个初始值为0的变量,并在循环内增加它。

答案 2 :(得分:0)

我将假设该集合没有按索引检索项目的工具(如List),否则您将使用简单的for循环。

foreach构造没有用于执行此操作的内置机制,但使用帮助程序类很容易实现。

foreach (var item in ForEachHelper.WithIndex(Model.SubTopic.Description))
{
  Console.WriteLine("<option value=\"" + item.Index.ToString("00") + "\">" + item.Value + "</option");
}

这就是助手类的样子。

public static class ForEachHelper
{
    public sealed class Item<T>
    {
        public int Index { get; set; }
        public T Value { get; set; }
        public bool IsLast { get; set; }
    }

    public static IEnumerable<Item<T>> WithIndex<T>(IEnumerable<T> enumerable)
    {
        Item<T> item = null;
        foreach (T value in enumerable)
        {
            Item<T> next = new Item<T>();
            next.Index = 0;
            next.Value = value;
            next.IsLast = false;
            if (item != null)
            {
                next.Index = item.Index + 1;
                yield return item;
            }
            item = next;
        }
        if (item != null)
        {
            item.IsLast = true;
            yield return item;
        }            
    }
}