我用Google搜索并罚款此链接,但仍无法正常工作 Convert List<T> to object[]
我想将int列表转换为object数组。为什么?因为我想在Combbox中将列表添加为对象数组,这就是参数。
问题是它在Combobox中只添加了“one item”Object [] Array,而“tempList”包含4个int类型的项目。
我想在object [](对象数组)中添加4个项目,现在它添加为1个项目,并在调试器中显示Object []数组。
当我查看调试器并输入:
客户 - 它显示对象[1]和我输入
时customers [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);
答案 0 :(得分:4)
您正在做的是当前正在创建阵列数组。因此,访问这些值将通过以下方式完成:
customers[0][1]
我怀疑你实际上正在寻找以下内容:
object[] customers = tempList.Cast<object>().ToArray();
这将创建一个名为customers
的对象项数组。
答案 1 :(得分:3)
List<int> tempList= ...;
object[] customers = tempList.Cast<Object>().ToArray();
答案 2 :(得分: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() }
你构建一个数组的数组!
答案 3 :(得分:2)
object[] customers = new object[] { tempList.Cast<object>().ToArray() };
在此创建一个object[]
,其中包含一项:另一个 object[]
,其中包含tempList
项。
只需使用object[] customers = tempList.Cast<Object>().ToArray()
而不是将其包装在其他 object[]
中。
答案 4 :(得分: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);
但是,自array covariance doesnt support for value types以来,这不适用于您的情况。
另一个想法是让扩展方法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,并将DisplayMember
或ValueMember
属性设置为您的媒体资源,例如Numero
。由于您在组合框中拥有整个对象,因此您可以获得更多信息。类似的东西:
ComboBox.DisplayMember = "Numero";
var customers = new CustomersRepository().GetAll();
ComboBox.Items.AddRange(customers); // using the above extension method