如何将泛型列表转换为对象数组 -> 对象[]
本文关键字:对象 数组 泛型 列表 转换 | 更新日期: 2023-09-27 18:35:19
我用谷歌搜索并罚款了这个链接,但仍然不起作用将列表
我想将 int 列表转换为对象数组。为什么?因为我想将列表添加为 Combbox 中的对象数组,所以它是参数。
问题是它在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);
您当前正在做的是创建一个数组数组。因此,访问这些值将通过以下方式完成:
customers[0][1]
我怀疑您实际上正在寻找以下内容:
object[] customers = tempList.Cast<object>().ToArray();
这将创建一个名为 customers
的对象项数组。
List<int> tempList= ...;
object[] customers = tempList.Cast<Object>().ToArray();
object[] customers = new object[] { tempList.Cast<object>().ToArray() };
在这里,您可以创建一个包含一项的object[]
:另一个包含tempList
项的object[]
。
只需使用object[] customers = tempList.Cast<Object>().ToArray()
而不是将其包装在另一个object[]
中即可。
试试这个:
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() }
你构建一个数组的数组!
如果您无论如何都想进一步处理并在以后获取数组,则不需要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);
但这在您的情况下不起作用,因为数组协方差不支持值类型。
另一个想法是有一个接受任何IEnumerable
的扩展方法AddRange
,而不仅仅是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
,并将DisplayMember
或ValueMember
属性设置为您的属性,例如 Numero
.由于您在组合框中拥有整个对象,因此您可以获得更多信息。像这样:
ComboBox.DisplayMember = "Numero";
var customers = new CustomersRepository().GetAll();
ComboBox.Items.AddRange(customers); // using the above extension method