c# - 方法声明中的方括号如何与c#一致?

时间:2010-09-10 03:18:26

标签: c# idataerrorinfo

方法声明中的方括号如何适合c#?这是我在阅读WPF验证时看到的,可以使用IDataErrorInfo以及以下示例。

public string this [string propertyName]

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

我注意到MSDN说“方括号([])用于数组,索引器和属性。它们也可以用于指针。”以上用法是指针吗?

3 个答案:

答案 0 :(得分:9)

这是C#语言的标准功能,称为Indexer。通常,您在编写自己的集合或类似类型时会使用这些。这是一个简短的(不是现实世界的)例子。

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;
    }
}

如果您有创意,可以使用索引器的很多很酷的东西,这是该语言的一个非常简洁的功能。

答案 1 :(得分:4)

这是索引器的声明。它与数组索引类似。 propertyName是该方法用于索引某种集合的字符串。该方法从集合中返回相应的字符串。

当然,该方法可以做其他事情,但这就是语义的含义。

答案 2 :(得分: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];