在LINQ Select期间访问递增的整数

时间:2009-12-01 21:57:43

标签: c# vb.net

Dim project = new Project(1)
Dim tasks = Task.GetTasks()
Return <?xml version="1.0" encoding="UTF-8"?>
               <Project xmlns="http://schemas.microsoft.com/project">
                   <Name><%= project.name %></Name>
                   <Tasks>
                       <%= tasks.Select(Function(t) _
                           <Task>
                               <ID><%= tasks.IndexOf(t) + 1 %></ID>                               
                           </Task> _
                           ) %>
                   </Tasks>
               </Project>

我试图用更简单的东西替换tasks.IndexOf(t) + 1。是否有内置功能?

Hrmm xml文字在这里似乎没有很好的翻译......

3 个答案:

答案 0 :(得分:5)

Enumerable.Select的重载支持将索引与对象本身一起传递。你可以使用那个:

Dim project = new Project(1)
Dim tasks = Task.GetTasks()
Return <?xml version="1.0" encoding="UTF-8"?>
               <Project xmlns="http://schemas.microsoft.com/project">
                   <Name><%= project.name %></Name>
                   <Tasks>
                       <%= tasks.Select(Function(t, idx) _
                           <Task>
                               <ID><%= idx + 1 %></ID>                               
                           </Task> _
                           ) %>
                   </Tasks>

答案 1 :(得分:2)

Select超载需要Func<TSource, int, TResult>(即Function(t,i)(t,i) => {...}) - int是索引。

答案 2 :(得分:1)

您可以使用使用索引器的Select overload。有关类似内容,请参阅this answer