【问题标题】:Using keyword error in C# with Visual Studio [duplicate]在 Visual Studio 中使用 C# 中的关键字错误 [重复]
【发布时间】:2013-03-15 13:59:27
【问题描述】:

我正在使用下面的代码行并收到错误:

在 using 语句中使用的类型必须隐式转换为 System.IDisposable

如何消除此错误?这是代码行:

using (var db = new HealthTrackerContext())

【问题讨论】:

  • 错误信息表明您的类型HealthTrackerContext 没有实现IDisposable 接口。你检查过是不是这样吗?
  • 确保 HealthTrackerContext 实现 IDisposable

标签: c#


【解决方案1】:

这意味着HealthTrackerContext 没有实现IDisposable

一种易于复制且线程安全的模式:

public partial class HealthTrackerContext: IDisposable {
    protected virtual void Dispose(bool disposing) {
        lock(thisLock)
            if(!disposed) {
                if(disposing) {
                    // release your resource 
                    // and set the referencing variables with null 

                    this.disposed=true;
                }
            }
    }

    public void Dispose() {
        this.Dispose(true);
        GC.SuppressFinalize(this);
    }

    ~HealthTrackerContext() {
        this.Dispose(false);
    }

    object thisLock=new object();
    bool disposed;
}

【讨论】:

  • 但我已经在执行如下
  • @Rifki:在下面?你如何对答案进行排序?下面是哪一个?
【解决方案2】:

你必须像这样为这个对象实现 IDisposable 接口:

public class Disposable : IDisposable
    {
        private bool isDisposed;

        ~Disposable()
        {
            Dispose(false);
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
        private void Dispose(bool disposing)
        {
            if (!isDisposed && disposing)
            {
                DisposeCore();
            }

            isDisposed = true;
        }


    }   

【讨论】:

  • 请注意,除非类有需要销毁的非托管对象,否则绝对没有理由添加这些乱七八糟的代码。从这个问题来看,听起来你正在以错误的方式思考这个问题:using 语句的存在是为了使实现 IDisposable 的对象更易于使用。如果你需要IDisposable,你只需要using
【解决方案3】:

HealthTrackerContext 应该实现 IDisposable 接口; 一旦你实现了那个接口,错误就会消失。

看这个链接http://msdn.microsoft.com/en-us/library/system.idisposable.aspx

【讨论】:

  • 它将如何实现?
【解决方案4】:

如果你的HealthTrackerContext 没有实现IDisposable,你会得到这个错误。我怀疑你的班级没有;因此,要纠正这种情况,您需要在对象上实现 IDisposable 或删除 using 块。

不使用using 块并没有错,顺便说一句 =D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 2018-03-02
    • 2010-12-18
    • 2011-06-16
    • 2011-10-10
    • 2021-07-11
    • 1970-01-01
    相关资源
    最近更新 更多