2010-01-05 82 views
3

比方說,我有List<Cookie>,我想將它轉換爲CookieCollection。最簡單的方法是什麼?將轉換列表<Cookie>轉換爲C#中的CookieCollection

我知道我可以使用一個foreach循環,但是沒有辦法用類似於這個的代碼來實例化它嗎?

List<Cookie> l = ...; 
var c = new CookieCollection() { l }; 

當我嘗試編譯,雖然,我得到的錯誤:

The best overloaded Add method 'System.Net.CookieCollection.Add(System.Net.CookieCollection)' for the collection initializer has some invalid arguments

順便說一句,有CookieCollection支持兩種Add方法:

public void Add(Cookie cookie); 
public void Add(CookieCollection cookies); 
+0

確實CookieCollection有一個構造函數一個IEnumerable 或ICollection的? – Sapph 2010-01-05 23:08:59

+0

不,唯一的構造函數不帶參數。 – Senseful 2010-01-05 23:13:53

+0

你可能會考慮看看這個(可能)[重複問題](http://stackoverflow.com/questions/524428/cannot-implicitly-convert-listt-to-collectiont)。 – 2010-01-05 23:10:42

回答

4

CookieCollection是在.Net 2之前編寫的(泛型之前)。因此,除了手動使用foreach循環外,沒有其他快捷方式可以實現。

+0

感謝您解釋爲什麼沒有快速的方法來做到這一點。 – Senseful 2010-01-05 23:17:31

+0

如果您使用列表 .ForEach(..)方法Paul Creasey在他的答案中發佈,則不必手動使用C#foreach循環。 – 2010-01-05 23:29:04

+0

@jdk:這仍然是一個foreach循環,只是語法不同。 – BFree 2010-01-06 00:17:44

1

你可以傳遞一個lambda到列表的ForEach方法。這將獨立於CookieCollection的構造函數。

List<Cookie> l = ...; 
var c = new CookieCollection(); 
l.ForEach(tempCookie => c.Add(tempCookie)); 
0
List<Cookie> l = ...; 
var c = new CookieCollection(); 
l.ForEach(x => c.Add(x)); 
+0

C#3.x和使用System.Collections.Generic; – 2010-01-05 23:32:05

8

鑑於cl作爲你的第一個例子,這個會做:

l.ForEach(c.Add); 
+0

沒有意識到你可以跳過lambda,很好。 – 2010-01-05 23:16:15

+0

好的,'x => y(x)'只是「一個帶x的函數,用它做y」的簡寫,由於'c.Add'也符合這個描述,所以你可以像你的匿名類型 - lambda =)'整齊 – 2010-01-05 23:25:06

+0

有趣的捷徑。太糟糕了,你不能標記兩個答案被接受。但在這種情況下,我更感興趣的是爲什麼我不能用這種形式初始化它,所以我接受了另一個答案。 – Senseful 2010-01-05 23:54:43

相關問題