我想为LoadFromXML加载和验证创建一个通用的辅助方法。如果我加载的XML不完整,我确实希望它在没有抛出异常的情况下完全失败。目前,我的代码看起来像这样(或多或少)
public override bool Load(XElement source)
{
return new List<Func<XElement, bool>>
{
i => this.LoadHelper(i.Element(User.XML_Username), ref this._username, User.Failure_Username),
i => this.LoadHelper(i.Element(User.XML_Password), ref this._password, User.Failure_Password)
//there are many more invokations of LoadHelper to justify this architecture
}
.AsParallel()
.All(i => i.Invoke(source));
}
private bool LoadHelper(XElement k, ref string index, string failure)
{
if (k != null && k.Value != failure)
{
index = k.Value;
return true;
}
return false;
}
this._username
是属性this.Username
使用的私有成员变量。这是我对这个问题的当前解决方案,但是我面临一个主要问题:因为我无法将属性本身传递给LoadHelper
并且Action<string>
与属性不匹配:(,I现在正在绕开财产制定者的逻辑。
对于你自己的思考,在LoadHelper
抽象之前,我的每个List<Func<XElement, bool>>
条目都是这样的......
i => ((Func<XElement, bool>)(k => { if (k == null || k.Value == User.Failure_Username) return false;
{ this.Username = k.Value; return true; } })).Invoke(i.Element(User.XML_Username)),
问题:有没有人知道如何在不绕过财产的二传手逻辑的情况下做到这一点?
答案 0 :(得分:5)
动作与属性
不匹配
如果我读得正确,你试图用“Action<string>
”替换“ref string index”,然后尝试传递Protperty。关闭但不完全。怎么回事?
private bool LoadHelper(XElement k, Action<string> setter, string failure)
{
if (k != null && k.Value != failure)
{
setter(k.Value);
return true;
}
return false;
}
然后
i => this.LoadHelper(i.Element(User.XML_Username), s=>{this.Username = s},
User.Failure_Username),
答案 1 :(得分:1)
我有时想知道.Net支持一个带有两个成员的GetPer接口的iProperty(T)接口,并自动包装字段和属性,以便iProperty(T)参数能够膨胀。通过一个领域或财产。
使用匿名方法,可以通过创建一个xProperty类来创建这样的东西,这个类的构造函数采用了获取和设置属性所需的方法。可以为任何希望其他类能够直接操作的属性定义类的实例。但是,如果有标准接口,事情就会好得多。不幸的是,我不知道现有的一个。