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?