[解決済み] C#のジェネリックス、変数の型をパラメータとして使用する [重複]...
2022-06-18 10:58:29
質問
ジェネリックメソッドを
bool DoesEntityExist<T>(Guid guid, ITransaction transaction) where T : IGloballyIdentifiable;
のように使うにはどうしたらよいでしょうか。
Type t = entity.GetType();
DoesEntityExist<t>(entityGuid, transaction);
以下のようなコンパイルエラーが発生します。
型名または名前空間名 't' が見つかりません。 が見つかりません(usingディレクティブやアセンブリの参照がないのでしょうか? ディレクティブかアセンブリ参照が足りないのでしょうか?)
DoesEntityExist<MyType>(entityGuid, transaction);
は完全に動作しますが、毎回別の型名でメソッドを呼び出すためにifディレクティブを使用したくありません。
どのように解決するのですか?
ジェネリックのポイントは コンパイル時 型安全性 - つまり、型はコンパイル時に知る必要があるということです。
あなたは は は、実行時にしか分からない型で汎用メソッドを呼び出すことができますが、リフレクションを使わなければなりません。
// For non-public methods, you'll need to specify binding flags too
MethodInfo method = GetType().GetMethod("DoesEntityExist")
.MakeGenericMethod(new Type[] { t });
method.Invoke(this, new object[] { entityGuid, transaction });
イク。
を作ることができますか? 呼び出し メソッドをジェネリックにして、型の引数として型パラメータを渡し、決定を一段階上のスタックに押し上げることはできますか?
あなたがやっていることについてより多くの情報を与えてくれるなら、それは助けになるでしょう。時には、上記のようにリフレクションを使用する必要があるかもしれませんが、それを行うための正しいポイントを選択すれば、一度だけそれを行う必要があることを確認し、そのポイントより下のすべてのものに通常の方法で型パラメータを使用させることができます。
関連
-
[解決済み】「namespace x already contains a definition for x」エラーの修正方法は?VS2010にコンバートした後に発生しました。
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
-
[解決済み] DateTime型の誕生日から年齢を計算するにはどうしたらいいですか?
-
[解決済み] オブジェクトの種類を決定しますか?
-
[解決済み] 型チェック:typeof、GetType、is?
-
[解決済み] Pythonで型をチェックする標準的な方法は何ですか?
-
[解決済み】type()とisinstance()の違いは何ですか?)
-
[解決済み】[DataContract]の名前空間]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C#で四捨五入する方法
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】ソケットのアドレス(プロトコル/ネットワークアドレス/ポート)は、通常1つしか使用できない?
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?
-
[解決済み] 関数を終了するには?
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み] リフレクションを使ってジェネリックメソッドを呼び出すにはどうしたらいいですか?