2012-05-20 119 views
0

我想要做一個類,你可以訪問它的一個集合,並獲得一個項目使用字符串索引,(我希望這是有道理的),基本上我想知道這是什麼或如何做到這一點?訪問一個集合

這裏是我的意思的一個例子;

string blah = SomeClass.Items["Item1"].ToString(); 

希望有人可以對此有所瞭解。

謝謝。

+0

我想這是有道理的,但你如何確定字符串名稱是什麼?你可以讓你的索引器做,並返回任何你想要的。 –

+0

它可能是一個'Dictionary '。或者你可以實現你自己的收藏。索引器(方括號)被實現爲'this'屬性。請參閱http://stackoverflow.com/questions/287928/how-do-i-overload-the-square-bracket-operator-in-c –

回答

2

我認爲您在尋找一個indexer

索引器允許像數組一樣索引類或結構的實例。索引器類似於屬性,但它們的訪問器需要參數。

在你的情況下,你想要使用字符串進行索引。事情是這樣的:

public MyItem this[string index] 
{ 
    get { return ... } 
} 

這可能是因爲你會過得更好,從你的語法去除Items層。這會導致您的代碼如下所示:

string blah = SomeClass["Item1"].ToString(); 
+0

+1在那裏舉例。 – Oded

1

您的意思是一個string indexer

索引器允許像數組一樣索引類或結構的實例。索引器類似於屬性,但它們的訪問器需要參數。

0

您可以在列表中使用包裝來獲取「Items」屬性。

public class MyClass 
{ 

    private readonly List<string> _myColl = new List<string>(); 

    public List<string> Items 
    { 
    get { return this._myColl; } 
    } 

} 

然後,您可以使用它,像這樣:

MyClass c = new MyClass(); 
c.Items.Add("something"); 

如果你需要一個字符串鍵,你可以隨時切換List to Dictionary<string, string>

public class MyClass 
{ 

    private readonly Dictionary<string, string> _myColl = new Dictionary<string, string>(); 

    public Dictionary<string, string> Items 
    { 
    get { return this._myColl; } 
    } 

} 

然後使用它像這樣:

MyClass c = new MyClass(); 
c.Items.Add("somekey", "somevalue"); 

我猜要點是你可以用這種模式包裝幾乎所有的集合,以適應幾乎任何需要。