J'ai une classe comme ceci:C# Indexer propriété Question
public class SomeClass
{
private const string sessionKey = "__Privileges";
public Dictionary<int, Privilege> Privileges
{
get
{
if (Session[sessionKey] == null)
{
Session[sessionKey] = new Dictionary<int, Privilege>();
}
return (Dictionary<int, Privilege>)Session[sessionKey];
}
}
}
Maintenant, si ce Ido ...
var someClass = new SomeClass();
var p = someClass.Privileges[13];
... et il n'y a pas 13 clé, je vais obtenir un erreur comme ceci:
The given key was not present in the dictionary.
Je voudrais avoir une propriété qui est accessible de la même manière que ci-dessus, bu t retournera un objet par défaut en cas d'absence de la clé.
J'ai essayé de créer une propriété indexeur comme ça ...
public Privilege Privileges[int key]
{
get
{
try { return _privileges[key]; }
catch { return new Privilege(); }
}
}
... mais il semble que ce n'est pas une fonctionnalité de langage C# 2008.
Comment puis-je accéder à la propriété de la même manière, mais obtenir l'objet par défaut si la clé n'est pas présente?
En utilisant la gestion des exceptions comme flux de contrôle est une mauvaise idée. Cela rend vos programmes difficiles à déboguer (parce que souvent vous voulez déboguer avec le suivi des exceptions de première chance, et beaucoup d'exceptions externes le rendent plus difficile), cela les ralentit, et cela va à l'encontre du fait que les exceptions sont supposées être exceptionnel. Il est préférable de vérifier d'abord si la clé existe, plutôt que de l'essayer et d'attraper l'exception lorsque ce n'est pas le cas. –
@Eric: Très bon point - J'en étais conscient avant de poster la réponse; cependant, la question se rapportait d'ailleurs à l'aspect propriété/indexeur de la question. Vous devriez probablement poster votre commentaire sur la question originale. – Noldorin