1

クラスに「Type」タイプの変数があります。

class A
{
    public static Type MyType;
}

そして、私はこの変数をどこでも構築して宣言しました。例:

A.MyType = b.GetType();

最初の問題:MyTypeに格納されている型で新しい変数を宣言する必要があります。

<MyType> myValue = new <MyType>;

2番目の問題:「タイプ」の変数を相互に還元できるかどうかを示す関数が必要です。

4

1 に答える 1

6

最初の問題:MyTypeに格納されている型で新しい変数を宣言する必要があります。

基本的にこれはできません。

変数の型は、コンパイル時に認識されている必要があります。実行時にのみ認識される型を使用して変数を宣言することはできません。ジェネリックスを使用して、そこにいくつかの方法を得ることができます。

public class Foo<T>
{
    private T value;
}

制約を追加しTて、パラメーターなしのコンストラクターを要求することもできます。このコンストラクターを呼び出すことができます。

public class Foo<T> : new()
{
    private T value = new T();
}

...そして、リフレクションを使用して実行時Foo<T>のタイプしかわからない場合に、を作成できます。T

Type genericDefinition = typeof(Foo<>);
Type constructed = genericDefinition.MakeGenericType(A.MyType);
object instance = Activator.CreateInstance(constructed);

...しかし、それはかなりすぐに乱雑になります。あなたは実際に何を達成しようとしているのかについて何も教えていないので、代替案を提案するのは難しいですが、これを回避するために再設計できるのであれば、私はそうします。

2番目の問題:「タイプ」の変数を相互に還元できるかどうかを示す関数が必要です

あなたが探している可能性はありますがType.IsAssignableFrom、それは明確ではありません...

于 2013-02-21T08:37:12.623 に答える