2011-09-28 49 views
1

它是更多鈔票,以在瞭解創建C#索引器,但這樣的事情:索引在C#中,但沒有這個

public class MyClass 
{ 
    Dictionary<int, string> myCollection = new Dictionary<int, string>(); 

    public string Value[int i] 
    { 
     get { return myCollection[i]; } 
     set { myCollection[i] = value; } 
    } 
} 

感謝

+0

有你嘗試自己運行代碼?它有什麼作用?它工作嗎? – ColinE

回答

1

不,C#沒有允許這樣做。

規格部分1.6.7.3說法:

的索引是一種使物體在相同的 方式爲陣列要索引的部件。一個索引器被聲明爲一個屬性,除了 成員的名稱是這個後跟在分隔符[和]之間寫有 的參數列表。

我建議你用簡單的方法,這就像:

public string GetValue(int key) 
{ 
    if (dictionary.ContainsKey(key)) 
     ..... 
} 

在你的情況,你通過key不是index reffer詞典項目,這是相當不同模式的東西。

PS:請記住,字典不會持續項目的順序,這可能對某些情況至關重要!

1

沒有,

其實你的財產Value已經從字符串有索引,並返回字符。可能你需要這樣的東西:

public class MyClass 
{ 
    Dictionary<int, string> myCollection = new Dictionary<int, string>(); 

    public Dictionary<int, string> Value 
    { 
     get { return myCollection; } 
     set { myCollection = value; } 
    } 
} 

而這將是你所期望的行爲。

string value = myClassInstance.Value[0]; 
+1

+1,但可能更好地公開一個IDictionary接口,並放棄setter :) – MattDavey

+0

是的但我不想返回所有的字典,因爲這也將被允許:myClassInstance.Value.Add(...),並且這個字典只能包含3個值,其他用戶不能添加其他值 – Robert

+0

因此,作爲一個選項,您可以:1)創建包含索引和封裝的字典的類型(如果您非常想要索引); 2)將屬性更改爲'GetValue(int key)'; – Samich

0

你不能這樣做的,(不C#支持)

怎麼樣,而不是

public class MyClass 
{ 
    public MyClass() 
    { 
      Values = new Dictionary<int, string>() 
    } 
     public Dictionary<int, string> Values { get; set } 
} 

這將然後讓你做

MyClass foo = new MyClass(); 
var someVal = foo.Values[3]; 
相關問題