我有以下代码:
foreach (var SubTopic in Model.SubTopic.Description)
{
<option value="xxx">SubTopic</option>
}
我想找到一种方法将索引号插入xxx作为值。 01表示第一个,02表示第二个选项行等。
有一种简单的方法吗?
答案 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;
}
}
}