假设我有两个列表,一个列表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分配给相同索引处的列表bookId
的{{1}}属性。我想避免使用for循环,并且想知道是否可以利用Linq。
我可以这样做,但是我不确定如何将整个bookIds列表分配给另一个列表的一个属性:
book
答案 0 :(得分:2)
与Theodor suggested in the comments一样,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
* 请注意,如果ArgumentOutOfRangeException
的元素少于bookIds
,则会抛出books
。