[英]populating List<dynamic> from an Enumerable.Range or a List<int>
目前,我使用以下 C# 代碼來填充具有整數范圍的List<dynamic>
對象:
var x = new List<dynamic>();
foreach (int i in Enumerable.Range(0, 100)) x.Add(i);
有沒有更清晰的方法來做到這一點? 我試過
x = Enumerable.Range(0, 50).ToList();
並且
x = Enumerable.Range(0, 50).ToList<dynamic>();
但兩者都會導致類型檢查錯誤,大概是因為 C# 沒有從List<T>
自動轉換為List<dynamic>
List<T>
。
請注意,我正在與外部庫交互,因此僅使用List<int>
而不是List<dynamic>
不是一種選擇。
您可以像這樣使用 LINQ:
var x = Enumerable.Range(0, 100).Select(i => (dynamic) i).ToList();
如果您的輸入確實是List<int>
(或List<T>
,甚至),則以下內容可以節省分配:
List<int> li;
var x = new List<dynamic>(li.Count);
x.AddRange(li.Cast<dynamic>());
如果您發現自己經常這樣做,那么這是擴展方法的主要候選者:
static class CollectionExtensions {
public static List<dynamic> ToDynamicList<T>(this ICollection<T> collection) {
var result = new List<dynamic>(collection.Count);
result.AddRange(collection.Cast<dynamic>());
return result;
}
}
使用ICollection
而不是IList
並沒有增加很多,但是嘿, ICollection
是引入Count
那個,所以為什么不呢。
否則,在.Cast<dynamic>()
之后使用.ToList()
.Cast<dynamic>()
工作正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.