[解決済み】インスタンス化されたSystem.Typeをジェネリッククラスの型パラメータとして渡す。
2022-04-14 10:55:30
質問
タイトルがなんだかよくわからない。知りたいのは、こんなことが可能なのか、ということです。
string typeName = <read type name from somwhere>;
Type myType = Type.GetType(typeName);
MyGenericClass<myType> myGenericClass = new MyGenericClass<myType>();
明らかに、MyGenericClassは、次のように記述されています。
public class MyGenericClass<T>
今現在、コンパイラは「The type or namespace 'myType' could not be found."」と文句を言っていますが、これを実行する方法があるはずです。
解決方法は?
リフレクションがないとできない。しかし、あなたは できる リフレクションを使えばいいんです。以下は完全な例です。
using System;
using System.Reflection;
public class Generic<T>
{
public Generic()
{
Console.WriteLine("T={0}", typeof(T));
}
}
class Test
{
static void Main()
{
string typeName = "System.String";
Type typeArgument = Type.GetType(typeName);
Type genericClass = typeof(Generic<>);
// MakeGenericType is badly named
Type constructedClass = genericClass.MakeGenericType(typeArgument);
object created = Activator.CreateInstance(constructedClass);
}
}
注意:ジェネリッククラスが複数の型を受け入れる場合、型名を省略するときなどにはカンマを入れる必要があります。
Type genericClass = typeof(IReadOnlyDictionary<,>);
Type constructedClass = genericClass.MakeGenericType(typeArgument1, typeArgument2);
関連
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] C#でメソッドをパラメータとして渡す
-
[解決済み] 汎用型Tのクラスインスタンスを取得する方法を教えてください。
-
[解決済み] 汎用クラスやメソッドのメンバからTの型を取得する方法
-
[解決済み] メソッドの戻り値の型を汎用的にするにはどうすればよいですか?
-
[解決済み】匿名クラスの汎用リスト
-
[解決済み】Nullable型をジェネリックパラメータにすることは可能か?
最新
-
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#で四捨五入する方法
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?
-
[解決済み] 関数を終了するには?
-
[解決済み] リフレクションを使用して汎用C#オブジェクトを動的に作成する方法は?重複