Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在csharp中嵌套泛型类(如果这是合适的名称)_C#_Generics_Class - Fatal编程技术网

C# 如何在csharp中嵌套泛型类(如果这是合适的名称)

C# 如何在csharp中嵌套泛型类(如果这是合适的名称),c#,generics,class,C#,Generics,Class,我想创建以下类型的类 public class EnumerableDisposer<IEnumerable<IDisposable>> 公共类EnumerableDisposer 但它不会让我这样宣布。我也试过: public class EnumerableDisposer<T> : IDisposable where T : IEnumerable<J> where J : IDisposable 公共类EnumerableDispos

我想创建以下类型的类

public class EnumerableDisposer<IEnumerable<IDisposable>>
公共类EnumerableDisposer
但它不会让我这样宣布。我也试过:

public class EnumerableDisposer<T> : IDisposable where T : IEnumerable<J> where J : IDisposable
公共类EnumerableDisposer:IDisposable其中T:IEnumerable其中J:IDisposable
但是编译器告诉我找不到类型/名称空间J

创建此类我必须做什么?

您需要执行以下操作:

public class EnumerableDisposer<T, J> : IDisposable 
    where T : IEnumerable<J> where J : IDisposable
{
     // Implement...

这迫使您使用一个
IEnumerable
构造它,其中T是IDisposable,只有一个泛型类型。由于您通过构造函数有效地添加了
IEnumerable
约束,因此它的功能与前面的选项相同。唯一的缺点是,您需要在构建时完成泛型,但鉴于其名称,我怀疑这将很好…

您需要定义
J

乙二醇

公共类EnumerableDispose:IDisposable
其中T:IEnumerable
其中J:IDisposable
最好是:

public class EnumerableDispose<T> : IEnumerable<T>, IDisposable
    where T : IDisposable
{
    public EnumerableDispose(IEnumerable<T> source)
    {
        // TODO: implement
    }
}
公共类EnumerableDispose:IEnumerable,IDisposable
其中T:IDisposable
{
公共EnumerableDispose(IEnumerable源)
{
//TODO:实现
}
}

您可以通过添加额外的
J
类型参数来完成此操作:

public class EnumerableDisposer<T, J> : IDisposable
    where T : IEnumerable<J>
    where J : IDisposable
公共类EnumerableDisposer:IDisposable
其中T:IEnumerable
其中J:IDisposable
请注意,这些
T
J
参数独立于外部类中的任何参数,即使它们具有相同的名称

public class EnumerableDispose<T> : IEnumerable<T>, IDisposable
    where T : IDisposable
{
    public EnumerableDispose(IEnumerable<T> source)
    {
        // TODO: implement
    }
}
public class EnumerableDisposer<T, J> : IDisposable
    where T : IEnumerable<J>
    where J : IDisposable