gpt4 book ai didi

c# - 通过反射填充枚举数组

转载 作者:行者123 更新时间:2023-11-30 16:22:36 31 4
gpt4 key购买 nike

我有一个方法可以读取一些 XML 并填充一个对象。这是通过基于 XML 中的元素名称数学运算对象上的属性名称的反射来完成的。这适用于基本对象类型,但我正在努力处理枚举数组。

所以我的枚举数组属性有一个 PropertyInfo 对象(我们称之为属性),我有一个字符串值(我们称之为值)包含表示枚举值的逗号分隔数字(例如“1,3,5”) .

我试过:

property.SetValue(this, value.Split(',').Select(i => int.Parse(i)).ToArray(), null);

property.SetValue(this, value.Split(',').Select(i => Enum.ToObject(property.PropertyType.GetElementType(), int.Parse(i))).ToArray() , 空);

但没有快乐。在第一个代码示例中,Select.ToArray 的结果是一个 int[],然后会抛出一个解析错误。与第二种情况类似,但 Select.ToArray 返回一个 object[] 并再次抛出解析错误。

我想写这个好像枚举类型是未知的。

有什么想法吗?

最佳答案

试试这个:

// create the enum values as object[]
var values = value.Split(',')
.Select(i => Enum.Parse(property.PropertyType.GetElementType(), i))
.ToArray()

// create array of correct type
Array array = (Array)Activator.CreateInstance(property.PropertyType, values.Length);

// copy the object values to the array
int i = 0;
foreach(var value in values)
{
array.SetValue(value, i++);
}

// set the property
property.SetValue(this, array, null)

可能有更简单的方法,但关键是您创建了正确类型的数组。

关于c# - 通过反射填充枚举数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12317452/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com