声明变量,类型为'Type'类型的变量

时间:2013-02-21 08:32:35

标签: c# .net

我班上的变量类型为'Type':

class A
{
    public static Type MyType;
}

我在任何地方建造了这个变量。例如:

A.MyType = b.GetType();

第一个问题:我需要使用存储在MyType中的类型声明新变量。

<MyType> myValue = new <MyType>;

第二个问题:我需要一个函数来指示是否可以减少'Type'的其他变量。

1 个答案:

答案 0 :(得分: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);

......但很快就会变得混乱。你还没有告诉我们你实际想要达到的目标,所以很难提出另一种选择 - 但如果你可以重新设计以避免这种情况,我会这样做。

  

第二个问题:我需要一个函数来指示是否可以减少'Type'

的变量

您可能正在寻找Type.IsAssignableFrom,但目前尚不清楚......