1. ホーム
  2. c#

[解決済み】C#で四角括弧演算子をオーバーロードするには?

2022-04-19 15:11:20

質問

DataGridViewなどでは、このようなことができます。

DataGridView dgv = ...;
DataGridViewCell cell = dgv[1,5];

が、どうしてもindex/square-bracket演算子に関するドキュメントが見つからないのです。 どのように呼ばれているのでしょうか? どこで実装されているのでしょうか? 投げることができるのでしょうか? どうしたら自分のクラスで同じことができるのでしょうか?

ETA: いつも迅速なご回答ありがとうございます。 簡単に言うと、関連するドキュメントは "Item" プロパティの下にあり、オーバーロードする方法は以下のようなプロパティを宣言することです。 public object this[int x, int y]{ get{...}; set{...} } 少なくともドキュメントによると、DataGridViewのインデクサは投げません。 無効な座標を指定した場合にどうなるかは書かれていません。

ETA 再び。OK、ドキュメントでは言及されていませんが(いたずらなMicrosoft!)、DataGridView用のインデクサは実際に無効な座標を与えるとArgumentOutOfRangeExceptionをスローすることが判明しました。 公正な警告です。

解決方法は?

その方法はこちらをご覧ください。 こちら . 要するに、そうなんです。

public object this[int i]
{
    get { return InnerList[i]; }
    set { InnerList[i] = value; }
}

ゲッターだけが必要な場合は、以下の構文になります。 以下のように答えます。 も使用できます(C# 6以降)。