gpt4 book ai didi

c# - 不能在 Using 语句中使用通用 C# 类

转载 作者:行者123 更新时间:2023-11-30 18:50:15 24 4
gpt4 key购买 nike

我试图在 using 语句中使用泛型类,但编译器似乎无法将其视为实现 IDisposable。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects;

namespace Sandbox
{
public sealed class UnitOfWorkScope<T> where T : ObjectContext, IDisposable, new()
{
public void Dispose()
{
}
}

public class MyObjectContext : ObjectContext, IDisposable
{
public MyObjectContext() : base("DummyConnectionString") { }

#region IDisposable Members

void IDisposable.Dispose()
{
throw new NotImplementedException();
}

#endregion
}

public class Consumer
{
public void DoSomething()
{
using (new UnitOfWorkScope<MyObjectContext>())
{
}
}
}
}

编译器错误是:

Error 1 'Sandbox.UnitOfWorkScope<Sandbox.MyObjectContext>': type used in a using statement must be implicitly convertible to 'System.IDisposable'

我在 UnitOfWorkScope 上实现了 IDisposable(并查看这是否是问题所在,也在 MyObjectContext 上)。

我错过了什么?

最佳答案

I implemented IDisposable on UnitOfWorkScope

不,你没有。您指定您的 T 应该实现 IDisposable。

使用这个语法:

public sealed class UnitOfWorkScope<T> : IDisposable where T : ObjectContext, IDisposable, new()

所以首先,声明 UnitOfWorkScope 实现的类/接口(interface)(IDisposable),然后声明 T 的约束(T 必须派生自 ObjectContext,实现 IDisposable 并具有无参数构造函数)

关于c# - 不能在 Using 语句中使用通用 C# 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2963533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com