Я хочу создать обобщенный вспомогательный метод загрузки и проверки 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>
не соответствует свойству :(, я обойду логику setterter права . Теперь
для ваших собственных размышлений, до LoadHelper
абстракции, каждый из моих записей List<Func<XElement, bool>>
«s выглядел так ...
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)),
Вопрос: кто-нибудь знает способ сделать это без обхода свойства-х логика сеттера
Ничего себе. Да, ты понял. Это оно! Спасибо, тон! – Squirrelsama
Разве не стыдно, что вы не можете рассматривать свойства в первоклассном виде как «Action' или 'Func ' делегаты? Определенно одна из моих самых раздражающих точек прилипания к C#. –
mquander
Я больше не мог согласиться. Я понимаю, почему - C# должен был бы сделать слишком много о параметре (будь то Action или Func ) для того, как статически типизирован C#. Но все же ... Мы должны просить Microsoft изменить это! : D –
Squirrelsama