列出<string>到object [] </string>

时间:2013-09-05 10:16:33

标签: c#

我有一个返回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);

6 个答案:

答案 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接受它)

来自12.5 Array covariance

  

对于任何两个引用类型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);
    }
}

可能会让仿制品出错,我有点生疏。