2014-06-05 80 views
1

的Python提供了以下語法來初始化功能Python列表:語法在C#功能初始化數組,類似蟒蛇

mylist = [item for item in iterable] 

有沒有在C#中類似的語法初始化一個C#列表?

編輯:

我想我應該更具體。我試圖效仿的語法如下:

mylist = [operation(item) for item in iterable] 
+2

iterable.ToList()? –

+0

[列表構造函數(IEnumerable )](http://msdn.microsoft.com/en-us/library/fkbw11z0.aspx)? – GSerg

回答

4

假設iterable是某種類型的IEnumerable<T>,您可以使用List<T>(IEnumerable<T>) constructor overload初始化一個新的列表:

mylist = new List(iterable); 

您也可以撥打的Linq Enumberable.ToList extension method

mylist = iterable.ToList(); 

的specifica lly,它看起來像是在如何做相當於列表理解之後。您可以使用Linq's Enumerable.Select method和一個lambda。例如,以匹配您的編輯:

mylist = iterable.Select(item => operation(item)).ToList(); 

作爲獎勵,如果你試圖做以下(添加條件):

mylist = [operation(item) for item in iterable if item > 42] 

你會添加一個調用Enumerable.Where鏈:

mylist = iterable.Where(item => item > 42).Select(item => operation(item)).ToList(); 
+0

謝謝!這正是我需要的。 – hlin117

0

您可以創建項目的C#列表,說整型,在下面的莊園:

List<int> myList = new List<int>{1, 2, 3, 4,}; 

因此,您不需要指定初始大小,它會從您的初始對象中推斷出它。如果你不是有一個枚舉,請參閱下面

IEnumerable<int> existingEnumerable = ... 
List<int> myList = new List<int>(existingEnumerable); 

代碼讓我們知道這是否符合您的需求。

0

看來你只是把一個可迭代的集合轉換成一個數組。

在C#中,集合類型上有一個.ToArray()擴展方法。也許這就是你需要的。

這將是:編輯後

result=iterable.ToArray(); 

,看來你要轉換列表中。

myList=iterable.Select(i=> Operation(i)); 
+0

對不起,我編輯了我的帖子。但你的回答是正確的,我的原始問題。 – hlin117

+0

然後使用lambda。 – Blaise