簡體   English   中英

填充列表<dynamic>來自 Enumerable.Range 或列表<int>

[英]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.

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