1

DevartのDotConnectforOracleコンポーネントを使用するアプリをいくつか作成しました。私の現在の問題では、Resharperが提起するいくつかの新しい問題が発生しています(Resharperの入力が無視された場合、アプリは正常にコンパイルおよび実行されます)。

特に私がいくつか持っているもの(Resharperの「C#コンパイラエラー」カテゴリ-繰り返しますが、コンパイラ自体はこれらについて実際に不平を言っていません)は次のとおりです。

「タイプ'Devart.Data.Oracle.OracleCommand'を'System.IDisposable'に暗黙的に変換することはできません。」

次のような同じ種類のコードを使用する他のプロジェクトに含まれていないのに、なぜこれが問題になるのでしょうか。

using (OracleCommand ocmd = new OracleCommand(query, oc)) {

注:次のような暗黙の型を使用するようにコードを変更すると、同じResharperの批判/観察も受けます。

using (var ocmd = new OracleCommand(query, oc)) {
4

2 に答える 2

3

ドキュメントによると、私が期待していたように、実際に実装しています。IDisposable(そして、はい、using ステートメントで使用するには、暗黙的に変換可能である必要がありIDisposableます。ステートメントの目的はusing、リソースが最後に破棄されることであり、「使い捨てリソース」の表現はIDisposableインターフェイスです。 ..)

ここでの実際のC# コンパイラには問題がないことに注意してください。それ以外の場合は、アプリを実行できません。これは、ReSharper の問題であることを示唆しています。

可能性:

  • R# には、DotConnect ライブラリで何らかの理由で失敗する独自の IL 解析がある場合があります
  • R# は何らかの理由でアセンブリを「失った」可能性があります (または、たとえば、アセンブリの読み込みに失敗しました)。
  • どういうわけかバストのインストールがあるかもしれません

まず、R#をアンインストールして再インストールし、ReSharper キャッシュ ディレクトリをすべて吹き飛ばして、かなりクリーンなスタートを切ることから始めます。DotConnect への参照を削除してから、再度追加してみてください。

それでもうまくいかない場合は、R# 固有のように聞こえるので、JetBrains サポートに相談するのが一番だと思います。私の経験では、彼らの技術サポートは本当に役に立ちます.

于 2012-09-04T20:19:34.357 に答える
1

あなたが言うときusing (someExpresion) { ... }、それはそうでsomeExpressionなければなりませんIDisposable。それが言いたいことのすべてusingです。

制御が block を離れると{ ... }、それが であるかどうかがチェックされ、そうでない場合someExpressionnull、そのDispose()上で呼び出されることが保証されます。

于 2012-09-04T20:19:19.583 に答える