爲什麼我在下面的聲明中收到錯誤?C#函數鏈接
List<int> intrs = new List<int>().AddRange(new int[]{1,2,3,45});
錯誤:無法將void類型轉換爲List?
爲什麼我在下面的聲明中收到錯誤?C#函數鏈接
List<int> intrs = new List<int>().AddRange(new int[]{1,2,3,45});
錯誤:無法將void類型轉換爲List?
因爲AddRange函數沒有返回值。您可能需要分兩步執行此操作:
List<int> intrs = new List<int>();
intrs.AddRange(new int[]{1,2,3,45});
AddRange不會返回已添加項的列表(不像StringBuilder)。你需要做這樣的事情:
List<int> intrs = new List<int>();
intrs.AddRange(new int[]{1,2,3,45});
的AddRange()被聲明爲:
public void AddRange(object[]);
它不返回列表。
你也可以使用一個集合初始化(假設C# 3.0+)。
List<int> intrs = new List<int> { 1, 2, 3, 45 };
編輯由280Z28:這適用於帶有Add
方法什麼。構造函數的括號是可選的 - 如果你想把東西傳遞給構造函數,比如容量,你可以用List<int>(capacity)
而不是上面寫的List<int>
來完成。
以下是有關Object and Collection Initializers的詳細信息的MSDN參考。
Dictionary<string, string> map = new Dictionary<string, string>()
{
{ "a", "first" },
{ "b", "second" }
};
通過在C#3.X(不知道2.0)的方式,你可以做任何的
List<int> intrs = new List<int>{1,2,3,45};
List<int> intrs = new []{1,2,3,45}.ToList(); // with Linq extensions
除了其他的答案,你可以添加自己的擴展方法,將增加範圍和回報名單(不是這是一個好的做法)。
順便說一句,如果你已經宣佈intrs,你可能會用括號做了它:
(intrs = new List<int>()).AddRange(new int[] { 1, 2, 3, 45 });
不過,我喜歡的初始化語法更好。
雖然其他人已經提到AddRange沒有返回值,但是基於給出的替代方案的樣本,還應該記住List的構造函數除了前面提到的代碼之外還將接受T的IEnumerable是.NET 3。5+
例如:
List<int> intrs = new List<int>(new int[]{2,3,5,7});
還有另一種方式。
List<int> intrs = new List<int>
{
1,
2,
3,
45
};
是的,我知道這與方法鏈不完全相關。 – 2011-04-12 19:57:39
因爲AddRange不返回列表。 –
2009-11-18 18:25:33