4

DataTableまたはDataRowCollectionを受け取り、それをジェネリック型の配列に変換するメソッドを作成しようとしています。このようなもの:

    public static T[] ConvertToArray<T>(DataTable dataTable)
    {
        List<T> result = new List<T>();

        foreach (DataRow dataRow in dataTable.Rows)
            result.Add((T)dataRow);

        return result.ToArray();
    }

問題はこの行です

result.Add((T)dataRow);

これにより、System.Data.DataRowをTに変換できなくなります。

ジェネリック型を使用せずに同じことを行い、オブジェクトのクラスにカスタム変換演算子が定義されていることを確認すると、コードは正常に機能します。

だから問題は今、ジェネリックを使用することのこれをどのように引き出すのですか?

4

1 に答える 1

4

DataRowで自分のタイプへの変換を提供するオブジェクトを使用できます。

public interface IDataRowConverter<T>
{
    T Convert(DataRow row);
}

関数にカスタムコンバーターを提供します:

public static T[] ConvertToArray<T>(DataTable dataTable, IDataRowConverter<T> converter)
{
    List<T> result = new List<T>();

    foreach (DataRow dataRow in dataTable.Rows)
        result.Add(converter.Convert(dataRow));

    return result.ToArray();
}

次に、必要なタイプのインターフェースを実装します。

public class MyObjectDataRowConverter : IDataRowConverter<MyObject>
{
    public MyObject Convert(DataRow row)
    {
        MyObject myObject = new MyObject();

        // Initialize object using the row instance

        return myObject;
    }
}

次に、次のコードを使用して関数を呼び出すことができます。

MyObject[] objectArray = 
    ConvertToArray<MyObject>(datatable, new MyObjectDataRowConverter());
于 2010-05-11T09:27:02.680 に答える