将数组类型转换为单数

Convert array type to singular

在 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;
}

得到以下输出:

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

static void Main(string[] args)
    {

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

        foreach (var type in types)
        {
            var typeInstance = type.GetElementType();

            if (typeInstance != null)
            {
                Debug.WriteLine($"{typeInstance}");
                objects.Add(Activator.CreateInstance(typeInstance));
            }
            else
            {
                objects.Add(Activator.CreateInstance(type));
            }
        }
    }

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

如果我没看错你的问题,你想获取数组的基类型,对吧?使用 IsArray 属性 类型应该很容易,只需像这样检查列表中的每个条目:

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

    return type.GetElementType();
}

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

发现这个作品:

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;
}