0

このリンクをグーグルで検索しましたが、まだ機能していません Convert List<T> to object[]

intのリストをオブジェクト配列に変換したい。なんで?リストをコンボボックスにオブジェクト配列として追加したいので、引数です。

問題は、「tempList」にはint型の4つのアイテムが含まれているのに対し、Comboboxに「1つのアイテム」Object []配列のみを追加することです。

object[] (オブジェクト配列) に 4 つの項目を追加したいのですが、今では 1 つの項目として追加され、デバッガーに Object[] 配列が表示されるだけです。

デバッガーを見て、次のように入力すると:

顧客 - オブジェクト [1] が表示され、入力すると

customers[0] は object[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);
4

5 に答える 5

4

あなたがしていることは、現在、配列の配列を作成しています。したがって、値へのアクセスは次のようにして行われます。

customers[0][1]

あなたが実際に探していると思われるのは次のとおりです。

object[] customers = tempList.Cast<object>().ToArray();

これにより、 というオブジェクト項目の配列が作成されcustomersます。

于 2013-10-14T12:49:33.970 に答える
3
List<int> tempList= ...;
object[] customers  = tempList.Cast<Object>().ToArray();
于 2013-10-14T12:48:47.740 に答える
2

このようにしてみてください:

var customers = tempList.Cast<object>().ToArray();

または、明示的なキャストでも:

var customers = tempList.Select(t => (object)t).ToArray();

リストの作成にイニシャライザを使用しているため、問題が発生しました。

この構文:

var arr = new object[] { "a", "b" }

2 つの文字列で配列を初期化します。

だから書いてる時は

var arr = new object[] { tempList.Cast<object>().ToArray() }

1 つの配列の配列を作成します。

于 2013-10-14T12:48:40.307 に答える
2
object[] customers = new object[] { tempList.Cast<object>().ToArray() };

ここでは、 のアイテムを含むobject[]のアイテムで を作成します。 object[]tempList


object[] customers = tempList.Cast<Object>().ToArray()の でラップする代わりに使用してください。 object[]

于 2013-10-14T12:50:21.573 に答える
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);

しかし、配列の共分散は値の型をサポートしていないため、これはあなたの場合には機能しません。


もう 1 つのアイデアは、 だけでなくAddRange任意の を受け入れる拡張メソッドを用意することです。何かのようなもの:IEnumerableobject[]

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設定することです。オブジェクト全体がコンボボックスにあるため、より多くの情報を入手できます。何かのようなもの:DisplayMemberValueMemberNumero

ComboBox.DisplayMember = "Numero";
var customers = new CustomersRepository().GetAll();
ComboBox.Items.AddRange(customers); // using the above extension method
于 2013-11-05T06:18:54.863 に答える