Я хочу создать обобщенный вспомогательный метод для загрузки и проверки 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>
не соответствует свойству :(, я обхожу логика установки свойств прямо сейчас.
По вашим собственным соображениям, до абстракции 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)),
Вопрос: Кто-нибудь знает способ сделать это, не обходя логику установщика свойства?