目前,我使用以下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<dynamic>
自动转换为List<T>
。
请注意,我正在与外部库进行交互,因此仅使用List<int>
代替List<dynamic>
不是一种选择。
答案 0 :(得分:3)
您可以像这样使用LINQ:
var x = Enumerable.Range(0, 100).Select(i => (dynamic) i).ToList();
答案 1 :(得分:2)
如果您的输入确实是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
的那个,所以为什么不呢。
否则,在.ToList()
正常工作后使用.Cast<dynamic>()
。