C#静态索引器不应该编译,但应该编译

本文关键字:编译 不应该 静态 索引 | 更新日期: 2023-09-27 17:58:25

我意识到C#中不能有静态索引器。但是为什么下面的代码能正确编译(在C#4.0下)?

由于Fred是一个静态类,它甚至不能被实例化。声明的静态索引器没有意义,但编译器允许它。为什么?我无法想象这是一个编译器错误这么晚才进入语言。

public static class Fred {
  public static int this[String str] {
    get {
      if (str != null)
        return str.Length;
      return -1;
    }
  }
}

C#静态索引器不应该编译,但应该编译

这不会编译。在编译过程中,Visual Studio报告了2个错误,CS0106和CS0720:

C: ''Path''To''Program.cs(5,23):错误CS0106:修饰符"static"对此项无效C: ''Path''To''Program''Program.cs(5,23):错误CS0720:"Fred.this[string]":无法在静态类中声明索引器