【发布时间】:2015-12-08 11:16:30
【问题描述】:
我正在尝试设置作为类的属性的值。
protected bool TryUpdate(PropertyInfo prop, object value)
{
try
{
prop.SetValue(this, value);
// If not set probably a complex type
if (value != prop.GetValue(this))
{
//... Don't know what to do
}
// If still not set update failed
if (value != prop.GetValue(this))
{
return false;
}
return true;
}
}
我正在对来自各种类的许多属性调用此方法。这个问题是当我有一个像下面这样的类时:
public class Test
{
public string Name { get; set; }
public string Number { get; set; }
public IComplexObject Object { get; set; }
}
Name 和 Number 设置得很好,但是如果我尝试设置从 IComplexObject 继承的类的实例 Object 没有错误,它只是保持为空。
有没有一种简单的方法可以将类的实例设置为属性?
例如,如果我将 prop 作为 {IComplexObject Object} 和 object 作为
var object = (object) new ComplexObject
{
prop1 = "Property"
prop2 = "OtherProperty"
}
最后没有错误,但 Object 仍然为 null 并且未设置为 ComplexObject 的实例。它需要是通用的,所以我可以传入任何类并且属性将被更新。
【问题讨论】:
-
假设示例在设置
Object属性时没有产生任何异常,那么设置应该是成功的。也许您的IComplexObjects 的平等比较是什么行为不端?逐步调试在这里会很有帮助。如果是相等,那么您可以尝试将比较替换为ReferenceEquals对于初学者 -
为什么你的更新方法是异步的?它似乎没有使用任务。
-
发布一个简短但完整、可重现的代码...
-
更新了代码和问题,使其更加清晰。我的问题是 SetValue 没有设置 Object 它只是保持 null 没有任何异常。
标签: c# reflection properties set