让我说我有这样的属性列表:
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
所有值都是字符串! 我不知道它是什么类型,int32只是一个例子。还会有花车,琴弦等。
所以...我正在创建一个新的类型数组,我从#34; ArrayType"属性
dynamic newArray = Array.CreateInstance(typeOfArray, arraySize);
我知道coure的arraySize
并且正确创建了数组。 但现在我想将所有值(以字符串形式)复制到我的新数组: 但我不知道如何施展它。我尝试过这样的事情:
newArray.SetValue(element.Property.Value,element.Index);
它抛出了一个异常,即他无法将OBJECT写入我的int数组
所以我试图以某种方式投射:
newArray[element.Index] = Convert.ChangeType(element.Property.Value,element.Property.Type);
但它仍然无法施放对象
有人可以帮忙:)?
答案 0 :(得分:0)
我刚刚编写了这个代码示例:
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;
}
}
答案 1 :(得分:0)
好的,现在一切正常: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);
}