我有这样一个类:C#索引器属性问题
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];
}
}
}
现在,如果此伊...
var someClass = new SomeClass();
var p = someClass.Privileges[13];
...并没有钥匙13,我会得到一个错误是这样的:
The given key was not present in the dictionary.
我想有一个能以同样的方式与上述被访问的属性,BU如果没有密钥,t将返回一个默认对象。
我试图创建一个索引属性是这样的...
public Privilege Privileges[int key]
{
get
{
try { return _privileges[key]; }
catch { return new Privilege(); }
}
}
......但看起来这不是一个C#2008语言功能。
如何以同样的方式访问属性,但如果密钥不存在则获取默认对象?
使用异常处理控制流是一个坏理念。它使得你的程序很难调试(因为通常你想要在第一次机会异常跟踪的时候进行调试,而且大量无关的异常会使它们变得更难),这使得它们变得很慢,并且它违背了例外情况下的设计事实是例外。最好首先检查键是否存在,而不是尝试它并在没有时捕获异常。 – 2009-07-06 18:27:26
@Eric:很公平 - 我在发布回复之前就已经意识到这一点;然而,问题还涉及到问题的属性/索引方面。您应该在原始问题上发表您的评论。 – Noldorin 2009-07-06 18:31:38