c# - 如何在 csharp 中做嵌套的通用类(如果这是合适的名称)

标签 c# generics class

我想创建一个如下类型的类

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/

相关文章:

java - 如何传递类型为Class<T[]> java的参数

java - 在 IntelliJ IDEA 中扩展具有和不具有类型的泛型类会给出不同的实现方法吗?

java - 使用泛型的 Selenium Webdriver 和类型构造函数 - 如何操作

c++ - 编译器是如何被欺骗提供指向封闭类的指针的?

c# - 如何在 C# 中使用 bigint?

c# - EF6 : Code First Complex Type

c# - 日历 System.Globalization.GregorianCalendar 不支持字符串表示的 DateTime

c# - 分部 View 异步加载,不加载,不报错

c# - 不是按名称而是按类型指定接口(interface)成员

php 调用父函数使父函数无法加载自己的变量