[解決済み】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以降)。
関連
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] JavaScriptに「NULL合体」演算子はありますか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?
-
[解決済み】C#で[]演算子をオーバーロードする方法【重複あり