【问题标题】:How do I create an instance of the Array type with a given ElementType?如何使用给定的 ElementType 创建 Array 类型的实例?
【发布时间】:2011-10-21 19:05:18
【问题描述】:

如何创建一个类型对象来表示具有给定元素类型的数组的类型?

Type t = MakeArrayType(elementType);  // How?

这样

Assert(t.GetElementType() == elementType);

我可以为我请求的数组创建一个虚拟 instance,然后从那里获取类型。但我想知道是否有一种方法可以在不先创建实例的情况下获取类型?

object myArrayInstance = Array.CreateInstance(elementType, 0);
Type t = myArrayInstance.GetType();   // This is the desired type.

【问题讨论】:

    标签: c# .net arrays serialization reflection


    【解决方案1】:

    如果t 指的是Type,那么t.GetType() 显然是typeof(Type) 或子类型——而不是typeof(Array)

    但是,我怀疑你想要Type.MakeArrayType

    Type arrayType = elementType.MakeArrayType();
    

    【讨论】:

    • 谢谢乔恩,我也编辑了这个问题(t.GetType() -> 只是 t)。我不知道为什么我没有想到“倒退”而不是从 typeof(Array) 开始。
    • @Anders:你仍然不会得到t == typeof(Array) - 如果这有效,你可以使用typeof(Array) 开始:) 你会得到一个与分配兼容的t不过Array
    • 好的,谢谢。只是出于好奇(我将更改问题,以便稍后计算答案),问题中的正确断言看起来如何?也许只是 Assert(t.IsArray()) ?还是断言根本没有帮助这个问题:)?
    • t.IsArray 会工作,是的。或typeof(Array).IsAssignableFrom(t)
    猜你喜欢
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    相关资源
    最近更新 更多