C# 我不喜欢的演员类型';我还不知道是什么

C# 我不喜欢的演员类型';我还不知道是什么,c#,arrays,reflection,C#,Arrays,Reflection,假设我有一个属性如下的列表: Type ArrayType String Value ArrayType=System.Int32 Value=44 Index=0 ArrayType=System.Int32 Value=11 Index=3 ArrayType=System.Int32 Value=7 Index=2 ArrayType=System.Int32 Value=5 Index=1 newArray.SetValue(element.Property.Value,el

假设我有一个属性如下的列表:

Type ArrayType
String Value 
ArrayType=System.Int32
Value=44
Index=0

ArrayType=System.Int32
Value=11
Index=3

ArrayType=System.Int32
Value=7
Index=2

ArrayType=System.Int32
Value=5
Index=1
newArray.SetValue(element.Property.Value,element.Index);
我还有另一个类似的清单:

Type ArrayType
String Value 
ArrayType=System.Int32
Value=44
Index=0

ArrayType=System.Int32
Value=11
Index=3

ArrayType=System.Int32
Value=7
Index=2

ArrayType=System.Int32
Value=5
Index=1
newArray.SetValue(element.Property.Value,element.Index);
所有值都是字符串! 我不知道它是什么类型,int32只是一个例子。还有浮点数、字符串等

所以。。。我正在创建我从“ArrayType”属性读取的类型的新数组

我知道这个国家的情况

并且正确地创建了阵列。 但现在我想将所有值(以字符串形式)复制到我的新数组中: 但我不知道怎么投。我试过这样的方法:

Type ArrayType
String Value 
ArrayType=System.Int32
Value=44
Index=0

ArrayType=System.Int32
Value=11
Index=3

ArrayType=System.Int32
Value=7
Index=2

ArrayType=System.Int32
Value=5
Index=1
newArray.SetValue(element.Property.Value,element.Index);
它抛出了一个异常,即他无法将对象写入我的int数组

所以我试着以某种方式加入:

 newArray[element.Index] = Convert.ChangeType(element.Property.Value,element.Property.Type); 
但它仍然无法投射该对象


有人能帮忙吗:)?

我刚刚做了一个代码示例:

var types = new[] { typeof(int), typeof(float), typeof(double) };
var elements = Enumerable.Range(1, 100)
                       .Select((value, index) => new Element(types[index % types.Length], value.ToString(), index));

var integers = elements.Where(element => element.ArrayType == typeof(int));
var array = Array.CreateInstance(typeof(int), 100);

Console.WriteLine(array.GetType());

foreach(var element in integers)
{
    var value = Convert.ChangeType(element.Value, element.ArrayType);
    array.SetValue(value, element.Index);
}

foreach(var value in array)
{
    Console.WriteLine(value + " " + value.GetType());
}
元素类别:

public class Element
{
    public Type ArrayType { get; private set; }
    public string Value { get; private set; }
    public int Index { get; private set; }

    public Element(Type type, string value, int index)
    {
        ArrayType = type;
        Value = value;
        Index = index;
    }
}

好了,现在一切都好了:D谢谢你的帮助

   foreach (var element in groupedElement)
                {
                    var newInstance = Activator.CreateInstance(element.Property.Type);

                    newInstance = element.Property.Value;

                    newArray.SetValue(Convert.ChangeType(newInstance, element.Property.Type, CultureInfo.InvariantCulture), element.Index);
                }

使用反射设置数组值。听起来可能是这样。为什么需要这样做?假设我将从数据库中获取具有类型的值,并从这些值创建动态对象。您有一个未知类型的数组,并且希望将其转换为字符串数组?是这样吗?数组中的所有值都将被转换为相同的类型,还是在同一个数组中混合使用float和int?