C#转换器困难

时间:2010-03-22 08:10:59

标签: c# converter

我正在尝试用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)); 

谢谢:)

2 个答案:

答案 0 :(得分:0)

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

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

的内容
conv = o => o.ToString();

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

的内容
conv = ParseStringIntoObject;

object ParseStringIntoObject(string stringRepresentation)
{
  // do whatever you need to do in order to convert your string
}

答案 1 :(得分:0)

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

如果您想将列表Form1.AnimalTypes的成员分配到组合框,您应该只将它们添加到Items集合中,然后您应该将DisplayMember设置为ValueMember的名称。要显示的属性,并comboBox.Items.AddRange(Form1.AnimalTypes); comboBox.DisplayMember = "AnimalTypeName"; comboBox.ValueMember = "AnimalTypeId"; 到要绑定的属性的名称。

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

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

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

对象的继承定义的转换需要转换器类,即如果要将苹果转换为橙子则使用转换器,但如果要将appels或orange转换为fruit,则使用转换。在c#3.0中,您可以使用以下代码段来构建完整的集合:

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

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

Select

使用Linq,您还可以使用var oranges = apples.Select(new Orange() { /* ... and initializers here ...*/}); 进行转换:

{{1}}