none
关于Type.MakeArrayType()方法 RRS feed

  • 问题

  • 先谢谢各位高手和热心人。

    谁能告诉我下面这段代码的问题。

    首先创建一个泛型类:

        public class Data<T>
        {
            public T Field { get; set; }
        }

    然后根据我对MakeArrayType方法的理解写了如下代码:

                Type classType = elementType.MakeGenericType(type);
                Type arrayType = classType.MakeArrayType();
                Console.WriteLine(arrayType.ToString());

                object list = Activator.CreateInstance(arrayType);

    前面都没有问题,但是在最后一行代码处抛出异常,错误是没有无参数构造函数。

    求高手指点。先谢过了。

    2011年2月1日 7:01

答案

  • 可以参考下面的代码,希望对你有所帮助:

    namespace ConsoleApplication13

    {

        class Program

        {

            static void Main(string[] args)

            {

                // 使用ILDasm可以看到该泛型的声明: ConsoleApplication13.Data`1<T>

                // 此处生成一个Data<int>类型.

                Type genericType = Type.GetType("ConsoleApplication13.Data`1").MakeGenericType(typeof(int));

                object list = Activator.CreateInstance(genericType);

            }

        }

     

        public class Data<T>

        {

            public T Field { get; set; }

        }

    }


    Eric Yang [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 eryang 2011年2月14日 8:57
    2011年2月2日 8:49
  • 您好,如果您想创建Data<T>的数组,我借Eric Yang的代码。

    namespace ConsoleApplication13

    {

        class Program

        {

            static void Main(string [] args)

            {

                Type genericType = Type .GetType("ConsoleApplication13.Data`1" ).MakeGenericType(typeof (int ));

                object list = Activator .CreateInstance(genericType);

                Type genericTypeArray = genericType.MakeArrayType();
                Console.WriteLine("\r\nArray of Data<T>: {0}", genericTypeArray);

            }

        }

     

        public class Data <T>

        {

            public T Field { get ; set ; }

        }

    }


    • 已标记为答案 eryang 2011年2月14日 8:57
    2011年2月8日 9:58

全部回复

  • 可以参考下面的代码,希望对你有所帮助:

    namespace ConsoleApplication13

    {

        class Program

        {

            static void Main(string[] args)

            {

                // 使用ILDasm可以看到该泛型的声明: ConsoleApplication13.Data`1<T>

                // 此处生成一个Data<int>类型.

                Type genericType = Type.GetType("ConsoleApplication13.Data`1").MakeGenericType(typeof(int));

                object list = Activator.CreateInstance(genericType);

            }

        }

     

        public class Data<T>

        {

            public T Field { get; set; }

        }

    }


    Eric Yang [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 eryang 2011年2月14日 8:57
    2011年2月2日 8:49
  • 您好,如果您想创建Data<T>的数组,我借Eric Yang的代码。

    namespace ConsoleApplication13

    {

        class Program

        {

            static void Main(string [] args)

            {

                Type genericType = Type .GetType("ConsoleApplication13.Data`1" ).MakeGenericType(typeof (int ));

                object list = Activator .CreateInstance(genericType);

                Type genericTypeArray = genericType.MakeArrayType();
                Console.WriteLine("\r\nArray of Data<T>: {0}", genericTypeArray);

            }

        }

     

        public class Data <T>

        {

            public T Field { get ; set ; }

        }

    }


    • 已标记为答案 eryang 2011年2月14日 8:57
    2011年2月8日 9:58