このコンストラクターを持つ一連のクラスがあります。
MyClass(Reader reader, dynamic json) { ... }
ジェネリックメソッドでオブジェクトをインスタンス化する必要があります。そうするために、私はコンストラクターをこのように取得しようとしました:
class Reader
...
T Get<T>(string id)
{
dynamic json = GetData(id);
var constructor = typeof(T).GetConstructor(new Type[] { typeof(Reader), typeof(dynamic) });
return constructor.Invoke(new object[] { this, json });
}
ただし、この状況ではどちらdynamic
もtypeof(dynamic)
受け入れられません。そうするための適切な方法は何ですか?コンストラクターは確かに存在します。この状況に対する拘束力のあるフラグはないようです。
今のところ、JsonWrapper
回避策として非常に単純なクラスを作成しました。
class JsonWrapper
{
JsonWrapper(dynamic json) { Json = json; }
dynamic Json { get; private set; }
}
...
var constructor = typeof(T).GetConstructor(new Type[] { typeof(Reader), typeof(JsonWrapper) });
GetConstructors()
これらのクラスには1つしかないため、最初のエントリを呼び出して取得することもできますが、それは壊れやすいでしょう。
ただし、この状況ではどちら
dynamic
もtypeof(dynamic)
受け入れられません。
のtypeof(object)
代わりに使用することを検討してくださいtypeof(dynamic)
。
MSDNは約言うdynamic
こと
ほとんどの場合、それはタイプオブジェクトを持っているように機能します。
特に、次のコードは「タイプ '.... JsonWrapper'は、同じパラメータータイプを持つ 'JsonWrapper'というメンバーを既に定義しています」というエラーで失敗します。
public class JsonWrapper
{
public JsonWrapper(dynamic json) { }
public JsonWrapper(object json) { }
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加