1

我正在尝试填写object[]List<string>但我无法弄清楚如何使用 ConvertAll。MSDN 没有帮助我。起初我试图创建一个 Converter 的实例,但它看起来像是需要委托?

Converter<string, object> conv = new Converter<string, object>(??); //why delegate? 
this.comboBox1.Items.AddRange(Form1.AnimalType.ConvertAll<object>(conv)); 

谢谢 :)

4

2 回答 2

0

委托将集合的每个成员转换为请求的类型。

如果您尝试将对象转换为字符串,请尝试类似

conv = o => o.ToString();

如果您尝试将字符串转换为对象,请尝试类似

conv = ParseStringIntoObject;

object ParseStringIntoObject(string stringRepresentation)
{
  // do whatever you need to do in order to convert your string
}
于 2010-03-22T08:14:41.533 回答
0

无需转换为对象,因为 .NET 运行时中的所有类型都继承自对象。

如果要将列表的成员分配给Form1.AnimalTypes组合框,则只需将它们添加到Items集合中,然后设置DisplayMember为要显示ValueMember的属性的名称和要绑定的属性的名称。

comboBox.Items.AddRange(Form1.AnimalTypes);
comboBox.DisplayMember = "AnimalTypeName";
comboBox.ValueMember = "AnimalTypeId";

如果您只想进行转换并且对组合框的分配无关紧要,您可以执行以下操作:

object[] myArray = Form1.AnimalTypes.ToArray();

对于不是由对象的继承定义的转换,转换器类是必需的,例如,如果您想将苹果转换为橙子,请使用转换器,但如果您想将苹果或橙子转换为水果,请使用强制转换。在 c# 3.0 中,您可以使用以下代码段强制转换完整的集合:

var newColOfBaseType = myList.Cast<BaseType>();

使用 Linq,您还可以从集合中过滤给定类型的条目,然后提取该特定类型的集合:

var oranges = fruit.OfType<Orange>().Cast<Orange>();

使用 Linq,您还可以使用它Select来进行转换:

var oranges = apples.Select(new Orange() { /* ... and initializers here ...*/});
于 2010-03-22T08:17:39.617 回答