当前,我使用以下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>
而不是是不可行的。 最佳答案
如果您输入的内容确实是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>()
可以正常工作。关于c# - 从Enumerable.Range或List <int>填充List <dynamic>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32997681/