インデクサの名前

C#でインデクサは、

public int this[string key] { get { ... } }

のように記述するけど、ほかの言語のためにItemという名前が勝手に付けられてしまう。
だから、

public int this[string key] { get { ... } }

public string Item(string str) { ... }

のようなコードはコンパイルエラーになる。
これを回避したければ、System.Runtime.CompilerServices.IndexerNameAttributeを使用して、

[System.Runtime.CompilerServices.IndexerName("OtherName")]
public int this[string key] { get { ... } }

public string Item(string str) { ... }

とする必要がある*1


これ、thisじゃなくてその名前を明示的に指定できるようにした方がわかりやすかったんじゃないかなぁ。

public int Item[string str] { get { ... } }

こんな感じに。
問題点としては、メソッドとの違いがちょっとわかりにくくなるかもしれないことかな。
()と[]だけ違うだけで、中身が全然違うし。

*1:こうするとItemのかわりにOtherNameが付けられる