我想创建一个如下类型的类
public class EnumerableDisposer<IEnumerable<IDisposable>>
但是它不让我这样声明。我也试过:
public class EnumerableDisposer<T> : IDisposable where T : IEnumerable<J> where J : IDisposable
但是编译器告诉我找不到类型/命名空间 J。
创建这个类需要做什么?
最佳答案
你需要做的:
public class EnumerableDisposer<T, J> : IDisposable
where T : IEnumerable<J> where J : IDisposable
{
// Implement...
不幸的是,为了包装任何内部类型( IEnumerable<J>
,在您的代码中),您的“包装”类需要具有类型 J
在通用定义中定义。此外,为了添加 IEnumerable<J>
约束,你需要有其他类型 T
.
话虽这么说,如果你想避免双重泛型类型规范,你总是可以按如下方式重做:
public class EnumerableDisposer<T> : IDisposable
where T : IDisposable
{
public EnumerableDisposer(IEnumerable<T> enumerable)
{
// ...
这迫使您使用 IEnumerable<T>
构造它其中 T 是 IDisposable,具有单个泛型类型。由于您有效地添加了 IEnumerable<T>
通过构造函数进行约束,这将与前一个选项一样起作用。唯一的缺点是您需要在构造时完成泛型,但考虑到名称,我怀疑这会很好...
关于c# - 如何在 csharp 中做嵌套的通用类(如果这是合适的名称),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3230569/