我有這樣一個類: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