私は方法があります。検出インタフェース
public void StoreUsingKey<T>(T value) where T : class, new() {
var idModel = value as IIDModel;
if (idModel != null)
Store<T>(idModel);
AddToCacheUsingKey(value);
}
私はIIDModel
のvalue
パラメータの実装に基づいて、次のメソッドを呼び出す必要に応じたいと思います。
public void Store<T>(T value) where T : class, IIDModel, new() {
AddModelToCache(value);
}
StoreUsingKey<T>
からvalue
パラメータはIIDModel
を実装することStore<T>
を伝える方法はありますか?それとも私はこれについて間違った方法をとっていますか?各方法からnew()
制約を削除リッチ
回答
コードが動作することを可能にします。この問題は、インスタンス化できるオブジェクトとしてインターフェースを渡そうとしていたことが原因でした。
しかし、StoreUsingKeyメソッドにはこの制約はありません。 Store を選択的に呼び出すにはどうすればよいですか?上記のエラーの例は、「IIDModel」から「T」に変換できません。 –
kim3er
これは動作していないようです: 'IIDModel'は、ジェネリック型またはメソッドでパラメータ 'T'として使用するためにパブリックパラメータレスコンストラクタを持つ非抽象型でなければなりません 'Store(T)' –
Tinister
、クラスの制約は赤い稚魚でした。私は過度に制限的だった。両方のメソッドからクラス制約を削除すると、コードが動作し始めます。ご協力いただきありがとうございます。 – kim3er