簡體   English   中英

AddRange()應該返回一個列表

[英]Should AddRange() return a list

在以下代碼中:

var cats = new List<string>() {"cat1", "cat2"};
var dogs = new List<string>() {"dog1", "dog2"};

var animals = new List<Animal>();

animals = (cats.Select(x => new Animal() {Type = "Cat", Name = x}).ToList().AddRange(
                        dogs.Select(x => new Animal() {Type = "Dog", Name = x}).ToList())).ToList();

最后調用ToList()是一個錯誤,因為AddRange()返回void。 現在使用Linq類型查詢時似乎不對。

我發現我可以將其更改為.Union().Concat()來解決問題,但是不應該更新AddRange() ,或者它是否有理由返回void?

AddRange更改基礎List對象。 沒有LinQ方法可以做到這一點。 所以它根本不同,不應該用於LinQ concatination。 它的返回值void反映。

你已經回答了自己的問題。 如果要從兩個列表中使用不同的值,請使用Union,如果只想加入兩個列表,請使用Concat。 一旦兩個枚舉已加入,您可以調用ToList()。

AddRange是List的一個方法,它與LINQ無關。

AddRangeList<T>上的一個方法,它早於LINQ。 它會原位改變當前列表,因此不需要返回它(它也不遵循你現在發現很多流暢的語法風格)。 List<T>不是不可變的,所以變異方法調用很好。

有linq方法可以將列表連接在一起(正如您在問題中所述)。 我傾向於沒有嵌入在linq方法鏈中的變異動作,因為它違背了linq只是一個查詢/投影設置並且不“更新”事物的一般想法。

在您的情況下,最好使用Enumerable.Concat

animals = cats.Select(x => new Animal() {Type = "Cat", Name = x})
                .Concat(dogs.Select(x => new Animal() {Type = "Dog", Name = x})).ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM