2010-09-10 124 views
1

方法聲明中的方括號如何適合c#?這是我看到在閱讀WPF驗證時,可以使用IDataErrorInfo和以下示例。c# - 方法聲明中的方括號如何適合c#?

公共字符串此[字符串參數propertyName]

// Error handling takes place here. 
public string this[string propertyName] // <== IE HERE 
{ 
    get 
    // etc 
    } 
} 

我注意到MSDN說:「方括號([])用於數組,索引和屬性。它們也可以用指針來使用。」那麼上面的用法是一個指針?

回答

8

這是稱爲Indexer的C#語言的標準功能。通常,在編寫自己的集合或類似的類型時可以使用它們。這是一個簡短的(不是真實的世界)例子。

public class Foo { 
    private List<int> m_Numbers = new List<int>(); 

    public int this[int index] { 
     get { 
      return m_Numbers[index]; 
     } 
     set { 
      m_Numbers[index] = value; 
     } 
    } 
} 

class Program { 
    static void Main() { 
     Foo foo = new Foo(); 
     foo[0] = 1; 
    } 
} 

有很多很酷的事情,你可以使用索引的,如果你有創意,它是語言的一個非常實用的功能。

+0

只是讓我們不要太* *創意。索引器的目的是看起來像數組索引,並且也像他們一樣行事。 – 2010-09-10 04:11:48

4

這是索引器的聲明。這與數組索引是一致的。 propertyName是該方法用於索引某種集合的字符串。該方法從集合中返回相應的字符串。

當然,該方法可以做別的事情,但這就是語義的含義。

2

這將是一個索引器屬性。他們是有用的自定義類別:

public class MyCustomCollection 
{ 
    List<MyObject> _list = new List<MyObject>(); 

    public string this[string name] 
    { 
     get { return _list.Single(o => o.Name == name) 
          .Select(o => o.Description); 
    } 

    public string this[int id] 
    { 
     get { return _list.Single(o => o.Id == id).Select(o => o.Description); 
    } 
} 

然後你就可以使用像集合:

MyCollection col = new MyCollection(); 

// Fill the collection 

string description = col["Name"]; 
string description2 = col[2];