1

方法声明中的方括号如何与 c# 匹配?这是我在阅读 WPF 验证时看到的,可以将 IDataErrorInfo 与以下示例一起使用。

公共字符串 this[字符串属性名]

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

我注意到 MSDN 说“方括号 ([]) 用于数组、索引器和属性。它们也可以与指针一起使用。” 那么上面的用法是指针吗?

4

3 回答 3

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

如果您有创造力,可以使用索引器来做很多很酷的事情,这是该语言的一个非常简洁的功能。

于 2010-09-10T03:25:05.663 回答
4

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

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

于 2010-09-10T03:22:22.523 回答
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];
于 2010-09-10T03:26:21.900 回答