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

C# 如何获取和设置可能是另一个对象的属性的对象的属性?,c#,system.reflection,C#,System.reflection,我有一个名为myConstraint的对象,可能有一个名为Parameter的属性 参数是一个具有名称属性的对象,该属性的类型为string 我想检查Constraint,如果它有属性Parameter则获取字符串Parameter.Name,如果它等于“Length”,则将Constraint.Parameter的值设置为myLengthParameter 我不能使用Constraint.Parameter,因为在程序运行之前,编译器不知道对象是否有属性参数。我试图使用反射,但我无法理解这一点

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

参数
是一个具有
名称
属性的对象,该属性的类型为string

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


我不能使用Constraint.Parameter,因为在程序运行之前,编译器不知道对象是否有属性参数。我试图使用反射,但我无法理解这一点。非常感谢您的帮助。

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


是的,你可以用反射来做

因为约束变量可以有任何值,所以您可以这样做

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);
        }
    }        
}

对象
投射到您的类,例如
((约束)myConstraint)。参数
您的意思是什么?为什么不把它放在那里呢?如果你不需要
参数
,就让它成为
null
?@kienct89:这不是我的代码,我只是在使用这个类。@j3soon:
myConstraint
是一个抽象类的对象,它可能是
约束
的任何继承子类。某些继承的类具有属性
参数
。所以
((约束)myConstraint)。参数
不起作用。我认为反射可以帮助解决这个问题。类似于:
var property=constraint.GetType().GetProperty(“参数”)但我不知道如何获取反射中的
参数.Name
有很多可能性。这行不通。我认为使用反射应该有所帮助。请看我的评论。
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);
        }
    }        
}