我有一个返回List<string>
的方法,我试图将其传递给AddRange(Object[])
的{{1}}方法。
如何将ComboBox
转换为List<string>
?
我想我可以做一个Object[]
,但我宁愿使用foreach
,因为它更快(并产生更少的代码)。
修改
以下工作正常:
AddRange(Object[])
然而,另一方面,我想要执行上述操作而不是:
var list = new List<string>();
object[] array = list.ToArray<object>();
comboBox.AddRange(array);
答案 0 :(得分:12)
您可以使用ToArray
通用方法执行此操作:
var list = new List<string>();
object[] array = list.ToArray<object>();
您甚至不需要Cast<object>
,因为ToArray
需要IEnumerable<T>
,这是通用类型参数的协变。
答案 1 :(得分:4)
您可以使用类似的更改类型:
object[] array = yourList.Cast<Object>().ToArray();
或者只是暗示:
yourcomboBox.AddRange(yourList.ToArray());
答案 2 :(得分:1)
List<string> items = ...;
cb.Items.AddRange(items.ToArray());
答案 3 :(得分:1)
也许这有效:
object[] myArray = myList.OfType<object>().ToArray();
答案 4 :(得分:0)
引用数组是协变的(slowly covariant)和它们的基类数组(以及它们的接口数组和其他数组),所以你可以:
AddRange(mystrings.ToArray());
mystrings.ToArray()
是string[]
,与object[]
协变(以便AddRange
接受它)
对于任何两个引用类型A和B,如果从A到B存在隐式引用转换(第6.1.4节)或显式引用转换(第6.2.3节),则数组中也存在相同的引用转换输入A [R]到数组类型B [R]
答案 5 :(得分:0)
如果是方便的话:
public static class ObjectCollectionExtension
{
public static void AddAll<T>(this ComboBox.ObjectCollection self, IEnumerable<T> es)
{
foreach (var e in es)
self.Add(e);
}
}
可能会让仿制品出错,我有点生疏。