假设我有两个列表,一个bookIds
列表和一个book
列表。
bookIds
列表如下所示:
var bookIds = new List<string>();
books
列表如下所示:
var books = new List<Book>();
public class Book
{
public string bookId;
public string bookName;
}
我想使用Linq
并将bookIds
列表中的每个 id 分配给同一索引book
列表的 bookId
属性。我想避免使用 for 循环,并且想知道我是否可以利用 Linq。
我可以做这样的事情,但我不确定如何将整个 bookIds 列表分配给另一个列表的一个属性:
books.foreach(x => x.bookId = bookIds); // ==> this is wrong but you might get my idea
更新:
正如Theodor在评论中建议的那样,IndexOf
可能会对性能产生相当大的影响,特别是如果你有一个很大的列表。为了避免使用IndexOf
,你可以创建一个int
变量,并在ForEach
内递增它:
int i = 0;
books.ForEach(x => x.bookId = bookIds[i++]);
原答案:
如果要将bookIds
列表中的第一个 id 分配给books
列表中的第一本书,将第二个 id 分配给第二本书,依此类推,您可以执行以下操作:*
books.ForEach(x => x.bookId = bookIds[books.IndexOf(x)]);
完整示例:
var bookIds = new List<string>() { "1", "2" };
var books = new List<Book>()
{ new Book() { bookName = "Book1" },
new Book() { bookName = "Book2"}
};
books.ForEach(x => x.bookId = bookIds[books.IndexOf(x)]);
Console.WriteLine(books[0].bookName + " has id: " + books[0].bookId);
Console.WriteLine(books[1].bookName + " has id: " + books[1].bookId);
输出:
Book1 has id: 1
Book2 has id: 2
*请注意,如果bookIds
元素少于books
,这将引发ArgumentOutOfRangeException
。