将数组类型转换为单数

时间:2017-09-20 08:39:06

标签: c# activator

在C#中,可以将数组类型转换为单数 - 用于 Activator.CreateInstance 。以此为例:

void Main()
{
    var types = new[] { typeof(ExampleClass), typeof(ExampleClass[]) };
    var objects = new List<object>();

    foreach (var type in types)
    {
        // possibly convert type here? (from array to singular - type[] to type) 

        Debug.WriteLine($"{type}");
        objects.Add(Activator.CreateInstance(type));
    }
}

// Define other methods and classes here

public class ExampleClass
{
    public int X;
    public int Y;
}

获取以下输出:

LINQPad output

3 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你可能想要通过反射使用Type.GetElementType()这样的东西。

INSERT INTO ... SELECT ... ;

答案 1 :(得分:1)

如果我正确理解你的问题,你想获得数组的基类型,对吧?使用该类型的IsArray属性应该非常简单,只需检查列表中的每个条目,如下所示:

private static Type GetTypeOrElementType(Type type)
{
    if (!type.IsArray)
        return type;

    return type.GetElementType();
}

顺便说一下,如果你想创建一个特定类型的新数组,你可以使用Array.CreateInstance而不是Activator.CreateInstance

答案 2 :(得分:0)

发现这有效:

void Main()
{
    var types = new[] { typeof(ExampleClass), typeof(ExampleClass[]) };
    var objects = new List<object>();

    foreach (var type in types)
    {
        Debug.WriteLine($"{type}");
        objects.Add(type.IsArray
                    ? Activator.CreateInstance(type, 1)
                    : Activator.CreateInstance(type));
    }
}

// Define other methods and classes here

public class ExampleClass
{
    public int X;
    public int Y;
}