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 に答える