1

我编写了几个应用程序,其中我使用 Devart 的 DotConnect for Oracle 组件。在我目前的问题中,我看到了 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,正如我所期望的那样。(是的,它必须可以隐式转换才能IDisposable在 using 语句中使用。该语句的目的using是在其末尾处置资源,并且“一次性资源”的表示是IDisposable接口。 ..)

请注意,这里真正的C# 编译器没有问题,否则您将无法运行您的应用程序 - 这表明这是一个 ReSharper 问题。

可能性:

  • R# 可能有自己的 IL 解析,但由于某种原因在 DotConnect 库上失败
  • R# 可能以某种方式“丢失”了程序集(或未能加载它,例如)
  • 您可能会以某种方式安装半身像

我会卸载并重新安装 R#,然后清除所有 ReSharper 缓存目录,只是为了给事情一个相当干净的开始。尝试删除然后阅读对 DotConnect 的引用。

如果失败,我怀疑您最好与 JetBrains 支持人员交谈,因为它听起来确实是特定于 R# 的。我的经验是他们的技术支持真的很有帮助。

于 2012-09-04T20:19:34.357 回答
1

当你说using (someExpresion) { ... },那someExpression一定是IDisposable。这就是说的全部意义using

当控制离开 block{ ... }时,将检查是否someExpressionnull,如果不是,Dispose()则保证在其上调用。

于 2012-09-04T20:19:19.583 回答