如何获取和设置可能是另一个对象的属性的对象的属性?

时间:2015-12-29 09:57:57

标签: c# system.reflection

我有一个名为myConstraint的对象,可能有一个名为Parameter的属性。

Parameter是一个具有Name属性的对象,其属性为string。

我想检查Constraint,如果它有属性Parameter,请获取字符串Parameter.Name,如果它等于“长度”,请将Constraint.Parameter的值设置为myLengthParameter

我不能使用Constraint.Parameter,因为编译器在程序运行之前不知道对象是否具有属性Parameter。我试图使用反射,但我无法弄清楚这一点。我很感激你的帮助。

2 个答案:

答案 0 :(得分:1)

使用is检查实例类型,然后将对象强制转换为Constraint类型。 (参考J3soon的评论)

if (myConstraint is Constraint)
{
   // cast and perform your operations here
}

答案 1 :(得分:1)

是的,你可以用反射来做到这一点。

由于约束变量可以包含任何值,因此您可以执行类似的操作。

var property = constraint.GetType().GetProperty("Parameter"); 

if (property != null)
{
    var parameter = property.GetValue(constraint);
    if (parameter != null)
    {
        var parameterName = parameter.GetType().GetProperty("Name").GetValue(parameter).ToString();
        if (parameterName == "Length")
        {
            property.SetValue(constraint, myLengthParameter);
        }
    }        
}