2010-09-10 74 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];