データベースモデルと通常のシステムモデルの2種類のオブジェクトがあります。新しい型制約付きの汎用コンストラクタ
私はモデルをデータベースモデルに変換することができたいと思います。
私は次のメソッドを持っている私が書いた:
public static E FromModel<T, E>(T other)
where T : sysModel
where E : dbModel
{
return new E(other);
}
を基本的にsysModel
とdbModel
両方が抽象的です。
dbModelにはすべてコピーコンストラクタを持つ多くの継承クラスがあります。
イム受信:それは は技術的に時々私はマッチングを持っていけないことを認識して新しい()制約
イムを持っていないbecauase
は、型パラメータ「E」のインスタンスを作成できません
T
のすべての値のコンストラクタです。少なくともデバッガが知っていることは分かります。私はまた、
where E : dbModel, new()
という制約を追加しようとしましたが、それはちょうど無関係です。ジェネリックメソッドとパラメータを使用してモデルを別のモデルに変換する方法はありますか?
ありがとうございました。あなたは、クラス/メソッドの定義に
new()
制約を指定する必要があります、ジェネリック型にnew
を使用するに
を '新しい()'制約は、タイプを指定するためのパラメータなしのコンストラクタを持っています。あなたはおそらく、あなたが必要とするコピー構築のタイプを公開するインタフェースを介して、ある種のジェネリックファクトリメソッドを導入する必要があります。 – Anthony
私は、実際にはコンストラクタを引数として渡さないようにしたいと思っています。 –
ジェネリック型の引数にパラメータ付きのコンストラクタを置くことはできません。これを行うには、Activator.CreateInstanceを使用して残しておき、使用する型にコンストラクタが一致するよう祈ってください。一般的に、ジェネリック型を使用するソリューションは、実装に強く依存するため、この種のことを控えるべきです。これは、「このメソッドは任意のタイプのストレージクラス* ANY TYPE *を構築できるようにしたいが、コンストラクタ内に文字列パラメータを持たなければならず、ファイル名でなければならない」というようなものです。 –