假设strArr
是一个字符串数组。在一个循环中,我拆分了每个变量,因此可以获得键和值。我要做的就是在XClass
中找到一个与 key 相等的属性,并将其设置为 value 。
如果strArr
元素不包含正确的键(例如示例中的“ propertyThree”),则XClass
中的属性不应更改(因此它为null)
示例代码:
string[] strArr = new string[] {
"propertyOne:valueOne",
"propertyTwo:valueTwo"
}
class XClass {
public string propertyOne {get; set;}
public string propertyTwo {get; set;}
public string propertyThree {get; set;}
}
-----
XClass instance = new XClass();
for (int i = 0; i < strArr.Length; i++) {
string[] arr = strArr.Split(':');
string key = arr[0];
string value = arr[1];
instance.key = value;
}
// Later on...
ExampleMethod(instance); // instance's properties
这会导致错误,因为XClass
没有名为key
的属性。这很明显,但是我不知道如何解决。
答案 0 :(得分:0)
您可以使用GetProperty
类型的instance
方法来查找名称与字符串匹配的属性,然后对该属性调用SetValue
来设置实例的值。
如果找不到属性name
,则GetProperty
将返回null
,因此我使用了?.
运算符来防止这种情况。
此外,您的原始样本中有一个错字-您在Split
(数组)而不是strArr
(字符串)上调用strArr[i]
。
XClass instance = new XClass();
for (int i = 0; i < strArr.Length; i++)
{
var parts = strArr[i].Split(':');
if (parts.Length < 2) continue;
var propName = parts[0];
var propValue = parts[1];
instance.GetType().GetProperty(propName)?.SetValue(instance, propValue);
}
请注意,此代码将与您提供的示例一样工作,但是propValue
必须具有正确的类型(在这种情况下为string
)才能起作用。因此,应该添加其他错误处理以使这项工作更通用。