3

さまざまなリストを渡す必要がある C# メソッドがあります。リストのタイプは非常に頻繁に異なります。メソッド自体は別の dll にあり、リストに含まれるクラス オブジェクトを認識できません (参照も using ステートメントもありません)。このメソッドは、リスト内の各項目の各メンバーを読み取り、それに基づいて文字列を構築して返す必要があります。

私の質問は、コンパイル時/実行時にこれらのさまざまなオブジェクトのメタデータを取得するにはどうすればよいですか? リフレクションはそれを行いますか?

また、メタデータを取得したら、それを使用して実際に変数を使用するにはどうすればよいですか?

ありがとうございました

編集:現在、私は次のように使用しています:

public string GetData(List<User> list){
//...
    List<RowData> rows = new List<RowData>();
    foreach (User item in list)
    {
        RowData row = new RowData();
        row.id = count++;
        row.cell = new string[3];
        row.cell[0] = item.ID.ToString();
        row.cell[1] = item.name;
        row.cell[2] = item.age.ToString();

        rows.Add(row);
     }
//...
    return new JavaScriptSerializer().Serialize(rows.ToArray());

現在、これは非常に具体的です。「ユーザー」以外のアイテムを渡すことができるように、これをジェネリックに置き換えたい

4

5 に答える 5

3

.GetType()を取得するTypeと、型に関する多くの説明を取得できます。

リフレクションを使用して、インスタンスのメンバーを検出することもできます

もっと正確に欲しいものを正確に教えてください。

編集:ここに方法があります。それを拡張メソッドにしてみてください。

public static List<RowData> ToDataTable<T>(IEnumerable<T> source)
{
    System.Reflection.PropertyInfo[] properties = typeof(T).GetProperties();
    List<RowData> rows = new List<JQGridRow>();


    foreach (var item in source)
    {
        RowData row = new RowData();
        row.cells = new string[properties.Length];
        int i=0;
        foreach (var prop in properties)
        {  
             row.cells[i] = prop.GetValue(item, null);i++;
        }
       rows.Add(row);
    }
    return rows;
}
于 2013-07-11T13:40:58.040 に答える
1

たぶん、このようなものですか?

    public string GetData<T>(IEnumerable<T> list, Func<T, RowData> fillRow)
    {
        List<RowData> rows = new List<JQGridRow>();
        foreach (User item in list)
        {
            RowData row = new RowData();
            row.id = count++;

            fillRow(row);

            rows.Add(row);
        }
        //...
        return new JavaScriptSerializer().Serialize(rows.ToArray());
    }

そして、それを次のように使用します

        string s = GetData(users, row =>
        {
            row.cell = new string[3];
            row.cell[0] = item.ID.ToString();
            row.cell[1] = item.name;
            row.cell[2] = item.age.ToString();
        });
于 2013-07-11T13:58:48.837 に答える