5

角括弧のC#リファレンスによると:角括弧[]は、配列、インデクサー、および属性に使用されます。また、ポインターとともに使用することもできます。(配列の場合も同様です)配列のインデックスが範囲外の場合は、例外がスローされます。

したがって、配列以外のもので角かっこを使用している場合、どのような例外がスローされる可能性があるかをどのようにして知ることができますか?

ディクショナリの場合(たとえば)、Dictionary.TryGetValueなどのアクセサメソッドを使用する、メソッドがスローする可能性のある例外を簡単に検索できますが、角括弧[]のC#リファレンスでは、インデックスの例外がスローされる可能性があるとのみ記載されています。配列の範囲。

したがって、一部のデータ型に角かっこを使用する場合、そのデータ型に対してスローされる可能性のある例外をどこで検索できますか?

辞書の存在しないメンバーにアクセスして、何が起こるかを確認しようとしましたが、KeyNotFoundExceptionが発生しました。NullReferenceExceptionも発生する可能性があることを私は知っています。これはどこに文書化されていますか?そして、完全なリストは何ですか?

4

4 に答える 4

4

実装ごとに文書化されています。演算子がオーバーロードされる可能性があるため、完全なリストはありません。したがって、理論的には、例外がスローされる可能性があります。演算子は通常、Itemプロパティとして文書化されます。

特定の使用法に関するいくつかのドキュメントは次のとおりです。

Dictionary.Item

Array.Item

ただし、スローされる可能性のあるものに関する完全なリストは必要ありません。例外は通常、次の2つの理由のいずれかでキャッチされます。何かを実行したい例外TryParseをキャッチする前の日が不正な日付形式をキャッチする最も簡単な方法だったなど)か、例外が発生したことに注意してログに記録するだけです。その場合、通常は実際の例外を再処理します。

前者の場合、特定の例外をキャッチすることは適切です。たとえば、をキャッチした場合、通常、どの参照がnullであるNullReferenceExceptionかを示す別の例外を再スローします(これはストックの一部ではないため) 。 NullReferenceException)

後者の場合、Exceptionログに記録して再スローしたいだけの場合は、ジェネリックをキャッチすることで問題ありません。これについては、他に何もできない可能性が高いためです。

于 2013-02-20T22:46:04.753 に答える
4

[]演算子がDictionary<TKey、TValue>またはList <T>に適用されると、インスタンスのインデクサーが呼び出されます。インデクサーはパラメーターを持つ特別なプロパティであり、通常はと呼ばれItemます。

于 2013-02-20T22:46:23.460 に答える
1

一般的に、角かっこを使用すると、基本的にインデックス付きのプロパティにアクセスできます。したがって、使用しているオブジェクトのプロパティインデクサーにエラーが記載されている場合は、そのプロパティにアクセスできます。

配列の場合、インデックスが範囲外である可能性があり、DataRowの場合、列が見つからないなどの可能性があります。

于 2013-02-20T22:45:29.993 に答える
1

配列へのアクセスに使用すると、をスローできIndexOutOfRangeExceptionます。

アトリビューションに使用すると、コンパイル時にエラーが発生するため、例外をスローすることはできません。

インデクサーへのアクセスに使用すると、例外をスローできます。インデクサーは任意の方法で実装でき、任意の例外をスローします。

于 2013-02-20T22:50:20.927 に答える