通过循环动态更改其他类的属性

时间:2019-06-19 23:28:13

标签: c# loops class properties

假设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的属性。这很明显,但是我不知道如何解决。

1 个答案:

答案 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)才能起作用。因此,应该添加其他错误处理以使这项工作更通用。