質問

想像してみてくださいオブジェクトを使って作業コレクションその他のオブジェクトに関連では、例えば、管理コレクション、WinForm.チェックしたい一定のオブジェクトのコレクションの集い Contains() 方法。う方法にはいくつかの種類があ対す。

  • 自分の実施 Contains() 法によるループを通じてすべての項目コレクションがその一つが何かを探しています。といっていいのかもしれないの"ベスト実践的に行えることを明らかにした。
  • いった一部のコンの代わりにループがアクセスしようとすると、オブジェクトの内部に試算しており
try  
{  
    Object aObject = myCollection[myObject];  
}  
catch(Exception e)  
{  
    //if this is thrown, then the object doesn't exist in the collection
}

私の質問は、どのよう貧困層のプログラミング演習いをご検討のオプションするのか。はどのように性能の比ループのコレクション

役に立ちましたか?

解決

私は自分が写っています。一人が幸せになるというループをローバリゼーション効率が低下する例外がサーバ機る例外。ともかお使いのコレクションアクセス、モデレーターによってグループのキーとして送信できるようにするのに適した辞書を使いながらやハッシュテーブル.

私の主な問題をこのコードがその種類を問わず、例外はスローされ、必ず左同じ結果です。

例えば、例外がスローされるのでオブジェクトは存在しないのコレクションでの収集そのものがnullであるかなーゆさんこちらで用意したキャストmyCollect[myObject】aObject.

これらすべての例外を取得しま取り扱いに同じように、あたりのご意思を

これらのカップルの素敵な記事があusallyも受け入れられるようになる例外をスロー:

私は特にこのように引用項目:

この例外を除いて スローされた場合にのみまたは予想外の 無効に活動の発生を防止する メソッドを完了する通常の 機能です。例外処理 を紹介する小さな費用を低減 パフォーマンスなどに用いるべきではありません 通常のプログラムフローの代わりに 条件付き処となります。することもでき 維持が難しくコード 誤用例外を扱うこと ます。

他のヒント

一般の経験則を利用するのは避ける特例制御の流れ場の状況をトリガする例外では"例外的"--例えば、非常に希少!

このかはこれから起こるであろう、通常、定期的にそれは間違いなくべきではないとして扱われます。

例外は非常に不備がある場合には不受理すべてのオーバーヘッドの関与ができるパフォーマンス上の理由でやれば、それはしばしば十分です。

場合は、書面にコードは、このオブジェクトのコレクション、そして実行中にだけこんだとしたら、その例外での適切な利用ます。

しかし、まだ試験の存在のオブジェクト、だけではないが、これはも例外ではありません。使用例外の場合することは適切ではない。

の分析の実行性能により、実際のコレクションの方法が模索します。ではおこらないような物になってる。んでいたという錯覚の最適化に抜きを書く。

私は考えてプレーすることでどうい...私はその直感はありえない...

編集:ライアンフォックスのコメントの例外的な場合には、私も彼の意見に賛成

業績面につきましては、によって違いますので、それぞれindexerに関するものと期待される。C#きをオーバーライドindexerオペレーターっているのではというループを含む方法で書くと、そして遅い(数ナノ秒遅めにはtry/catch...も気にしない限り、コードそのものが巨大なループ).

場合にはindexerはO(1)(でO(log(n))...何よりも速くO(n))のtry/catch液うになります。

また、私としてindexerロー例外の場合は、nullを返すまでのコースだけをチェックのためのnullの場合、使用しないではtry/catch.

一般には、例外処理のためのプログラムの流れと論理が悪い。個人的に感じ、後者のオプションが受入れられな使用の例外をスローしました。さらに特徴の言語使用など、Linq、lambdasクライアントまで、フルのC#例がない理由をお書き独自のを含む()メソッドがあります。

最終え、この日一番館 して含む方法。と思うのがかかる場合もあります。

例外は格別です。

のようなものを収集は欠でのデータベースから脱落下からではの特例

のようなものをキーが存在しない'は、通常の行動のための辞書で調べました。

お客様の特定の例などをサポート制御、 Controls ています。 ContainsKey 方法はいず利用します。

ありません ContainsValue での処理時の辞書/超えるセットはハッシュテーブルが速い方法の繰り返し処理のコレクション全体のチェックがそろわない場合は現在でも誘ってます。

した理由の例外を除き、この約2もの

  1. を示すかにコードがあしらわれている。たいていコードに一致でに私達は、緊密にできるので、読み取り可能と保守性.例外処理を追加します束のcruftを取得するには、この目的

  2. 簡潔です。したいコードなどで行なっているのには最も直接的な方法で読み取り可能と保守性.再度、cruftの追加により例外扱いにくいのです。

このブログからKrzystof: http://blogs.msdn.com/kcwalina/archive/2008/07/17/ExceptionalError.aspx

例外は用いるべきである通信エラー条件がすべきではないとして使用制御理論(特に時があまりに単純な方法を決定する条件などを含む).

一部の問題は、その例外しているわけではないものになり 投げ は高価なため すべての例外で獲れません。

後者は、受け入れ可能な解決策.がんキャッチボールの特定の例外(ElementNotFound?) を収集する場合があります。

Speedwiseによって違いますので、それぞれに共通する。まる可能性が高くなりますの要素のない例外液になります。まる可能性が高くなりますが、それに頼ることになるでしょうサイズの収集とその繰り返します。もしかしたらいいの措置通常の使用がこのボトルネック前を気に速いです。Go機能再構成に成功しました。初の溶液かなり明ることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top