Je souhaite créer une méthode d'assistance généralisée pour le chargement et la validation LoadFromXML. Si le XML que je charge est incomplet, je veux qu'il échoue complètement sans lancer une exception. À l'heure actuelle, mon code ressemble à ceci (plus ou moins)Passer des propriétés en tant que paramètres
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
est une variable de membre privé qui est utilisé par la propriété this.Username
. C'est la solution actuelle que j'ai pour ce problème, mais je suis confronté à un problème majeur: Puisque je ne peux pas passer la propriété elle-même au LoadHelper
et Action<string>
ne correspond pas à la propriété :(, je contourne la logique de réglage de la propriété droite . maintenant
pour vos rêveries, avant l'abstraction LoadHelper
, chacune de mes entrées de List<Func<XElement, bool>>
avait l'air comme ça ...
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)),
question: Est-ce que quelqu'un sait quelle façon de le faire sans se soustraire de la propriété logique de réglage?
Wow. Oui tu l'as. Ça y est ...! Merci une tonne mate! – Squirrelsama
N'est-il pas dommage que vous ne puissiez pas traiter les propriétés de façon très classe comme des «délégués» ou «Func »? Certainement l'un de mes points de friction les plus irritants sur C#. –
mquander
Je ne pouvais pas être plus d'accord. Je comprends pourquoi - C# devrait en déduire un peu trop sur le paramètre (que ce soit une action ou Func ) pour savoir comment C# est statiquement typé. Mais encore ... Nous devrions pétitionner Microsoft pour changer cela! :RÉ –
Squirrelsama