0

我用谷歌搜索并罚款了这个链接,但仍然无法 使用 Convert List<T> to object[]

我想将 int 列表转换为对象数组。为什么?因为我想将列表添加为组合框中的对象数组,所以它是参数。

问题是它在 Combobox 中只添加了“一个项目”Object[] 数组,而“tempList”包含 4 个 int 类型的项目。

我喜欢在 object[] (对象数组)中添加 4 项,现在它添加为 1 项,并且只在调试器中显示 Object[] 数组。

当我查看调试器并输入:

客户 - 它显示对象 [1] 以及当我键入时

客户[0]它显示对象[4],所以实际上添加了4个项目,但是我怎样才能得到这些值。???

List<int> tempList= new CustomersRepository().GetAll().Select(a => a.Numero).ToList();
object[] customers = new object[] { tempList.Cast<object>().ToArray() };
ComboBox.Items.AddRange(customers);
4

5 回答 5

4

您正在做的是当前创建一个数组数组。因此,访问这些值将通过以下方式完成:

customers[0][1]

我怀疑您实际上正在寻找的是以下内容:

object[] customers = tempList.Cast<object>().ToArray();

这将创建一个名为 的对象项数组customers

于 2013-10-14T12:49:33.970 回答
3
List<int> tempList= ...;
object[] customers  = tempList.Cast<Object>().ToArray();
于 2013-10-14T12:48:47.740 回答
2
object[] customers = new object[] { tempList.Cast<object>().ToArray() };

在这里,您创建一个object[]包含一个项目:另一个 object[]包含 的项目tempList


只需使用object[] customers = tempList.Cast<Object>().ToArray()而不是将其包装在另一个 object[].

于 2013-10-14T12:50:21.573 回答
2

试试这种方式:

var customers = tempList.Cast<object>().ToArray();

或者也有明确的演员表:

var customers = tempList.Select(t => (object)t).ToArray();

出现问题是因为您正在使用初始化程序来构建您的列表。

这种语法:

var arr = new object[] { "a", "b" }

用两个字符串初始化一个数组。

所以当你在写

var arr = new object[] { tempList.Cast<object>().ToArray() }

你构建一个数组的数组!

于 2013-10-14T12:48:40.307 回答
0

ToList()如果您想进一步处理并稍后获取数组,则不需要。这样的事情应该更有效:

var temp = new CustomersRepository().GetAll().Select(a => a.Numero);
object[] customers = temp.Cast<object>().ToArray();
ComboBox.Items.AddRange(customers);

如果 temp 是引用类型的集合,则根本不需要强制转换,而是依赖数组协方差。这应该有效:

var temp = new CustomersRepository().GetAll().Select(a => a.StringProperty);
object[] customers = temp.ToArray(); //no need of Cast<object>
ComboBox.Items.AddRange(customers);

但这不适用于您的情况,因为数组协方差不支持值类型


另一个想法是有一个扩展方法AddRange,它接受任何IEnumerable,而不仅仅是object[]. 就像是:

public static void AddRange(this IList list, IEnumerable lstObject)
{
    foreach (T t in lstObject)
        list.Add(t);
}

现在您可以致电:

var customers = new CustomersRepository().GetAll().Select(a => a.Numero);
ComboBox.Items.AddRange(customers);

最好的方法是Customer像这样添加 s,并将DisplayMemberorValueMember属性设置为您的属性,例如Numero. 由于您在组合框中拥有整个对象,因此您可以获得更多信息。就像是:

ComboBox.DisplayMember = "Numero";
var customers = new CustomersRepository().GetAll();
ComboBox.Items.AddRange(customers); // using the above extension method
于 2013-11-05T06:18:54.863 回答