【问题标题】:System.Windows.Forms.ComboBox.Items.AddRange() fails for List<DictionaryEntry>System.Windows.Forms.ComboBox.Items.AddRange() List<DictionaryEntry> 失败
【发布时间】:2018-06-27 16:16:52
【问题描述】:

我从外部包裹收到List&lt;DictionaryEntry&gt; list

我想将它传递给ComboBox.Items.AddRange(),这需要object[]

我试过了:

comboBox.Items.AddRange(list.ToArray());
comboBox.Items.AddRange((object[])(list.ToArray()));

但 C# VS2013 编译器失败。

以下基于ComboBox.Items.Add() 的代码可以完美运行,无需将DictionaryEntry 显式转换为对象。

foreach (DictionaryEntry item in list)
    comboBox.Items.Add(item);

由于其他原因,我不想使用可以分配List&lt;DictionaryEntry&gt; listcombobox.DataSource 属性。

有没有什么简单的方法可以将List&lt;DictionaryEntry&gt;列表转换成object[]

【问题讨论】:

  • 您确定转换为object[] 会导致开销吗?这可能是微优化。您应该运行测试,看看它是否真的有那么大的交易,我认为不会,铸造不是一项昂贵的操作。更昂贵的是装箱/拆箱。
  • @AustinWBryan 我的意思是开销解决方案,例如我的代码中的 foreach 示例或从 List 编写派生类。

标签: c# data-binding combobox


【解决方案1】:

尝试使用Cast&lt;&gt;() 方法:

comboBox.Items.AddRange(list.Cast<object>().ToArray());

【讨论】:

  • List 列表中既没有 Cast() 也没有 Cast() 方法
  • 使用 System.Linq 添加;
  • Cast 方法出现但编译器仍然失败:错误 CS1503:参数 1:无法从 'System.Collections.Generic.IEnumerable' 转换为 'object[]'
  • 调用 ToArray() 就可以了。
  • 您的解决方案有效。但是我测试它比我的 foreach (combobox.Item.Add()) 示例慢 5 倍
猜你喜欢
  • 2014-11-26
  • 2017-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2012-04-11
  • 1970-01-01
相关资源
最近更新 更多