如何获取和设置可能是另一个对象的 属性 的对象的 属性?
How to get and set property of an object which might be property of another object?
我有一个名为 myConstraint
的对象,它 可能 有一个名为 Parameter
的 属性。
Parameter
是一个具有 Name
属性 类型字符串的对象。
我想检查 Constraint
如果它有 属性 Parameter
获取字符串 Parameter.Name
如果它等于 "Length" 设置Constraint.Parameter
到 myLengthParameter
.
的值
我不能使用 Constraint.Parameter,因为编译器不知道对象是否有 属性 参数,直到程序为 运行。我尝试使用反射,但我无法弄清楚。非常感谢您的帮助。
使用 is 检查实例类型,然后将对象转换为 Constraint
类型。 (参考J3soon的评论)
if (myConstraint is Constraint)
{
// cast and perform your operations here
}
是的,您可以使用反射来做到这一点。
因为constraint变量可以有任何值,所以你可以做类似的事情。
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
的对象,它 可能 有一个名为 Parameter
的 属性。
Parameter
是一个具有 Name
属性 类型字符串的对象。
我想检查 Constraint
如果它有 属性 Parameter
获取字符串 Parameter.Name
如果它等于 "Length" 设置Constraint.Parameter
到 myLengthParameter
.
我不能使用 Constraint.Parameter,因为编译器不知道对象是否有 属性 参数,直到程序为 运行。我尝试使用反射,但我无法弄清楚。非常感谢您的帮助。
使用 is 检查实例类型,然后将对象转换为 Constraint
类型。 (参考J3soon的评论)
if (myConstraint is Constraint)
{
// cast and perform your operations here
}
是的,您可以使用反射来做到这一点。
因为constraint变量可以有任何值,所以你可以做类似的事情。
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);
}
}
}