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