29

是否可以在 .NET 4 中创建一个类:

  1. 索引器,
  2. 一个名为“项目”的属性?

例如,这个 C# 类不会为我编译:

public class MyClass
{
    public object Item { get; set; }
    public object this[string index] { get { return null; } set { } }
}

编译器给出错误CS0102

“MyClass”类型已经包含“Item”的定义

虽然我只明确定义Item一次。

4

3 回答 3

42

基于此站点,可以使用属性重命名索引器

public class MyClass
{
    public object Item { get; set; }
    [System.Runtime.CompilerServices.IndexerName("MyItem")]
    public object this[string index] { get { return null; } set { } }
}
于 2011-02-24T21:10:30.173 回答
27

C# 在内部Item为不支持索引器的语言创建了一个属性。您可以使用IndexerNameAttribute控制此名称,如下所示:

[IndexerName("MyIndexer")]
public object this[string index]
{
    get { return blah; }
}
于 2011-02-24T21:11:54.130 回答
4

如果我没记错的话,可以通过“Item()”方法从 VB.Net 访问这样的索引器。这就是“定义两次”的来源。

于 2011-02-24T21:03:12.640 回答