我想创建一个以下类型的类
public class EnumerableDisposer<IEnumerable<IDisposable>>
Run Code Online (Sandbox Code Playgroud)
但它不会让我以这种方式宣布它.我也尝试过:
public class EnumerableDisposer<T> : IDisposable where T : IEnumerable<J> where J : IDisposable
Run Code Online (Sandbox Code Playgroud)
但是编译器告诉我无法找到类型/命名空间J.
创建这个课我需要做什么?
Ree*_*sey 15
你需要这样做:
public class EnumerableDisposer<T, J> : IDisposable
where T : IEnumerable<J> where J : IDisposable
{
// Implement...
Run Code Online (Sandbox Code Playgroud)
不幸的是,为了包装任何内部类型(IEnumerable<J>
在您的代码中),您的"包装"类需要具有J
通用定义中定义的类型.另外,为了添加IEnumerable<J>
约束,您需要具有其他类型T
.
话虽这么说,如果你想避免双泛型类型规范,你总是可以按如下方式重做:
public class EnumerableDisposer<T> : IDisposable
where T : IDisposable
{
public EnumerableDisposer(IEnumerable<T> enumerable)
{
// ...
Run Code Online (Sandbox Code Playgroud)
这会强制您构造它,IEnumerable<T>
其中T是IDisposable,具有单个泛型类型.由于您IEnumerable<T>
通过构造函数有效地添加了约束,因此它将与前一个选项一样有效.唯一的缺点是你需要在施工时完成通用,但鉴于名称,我怀疑这将是好的...
你需要定义J
.
例如
public class EnumerableDispose<T, J> : IDisposable
where T : IEnumerable<T>
where J : IDisposable
Run Code Online (Sandbox Code Playgroud)
更好的是:
public class EnumerableDispose<T> : IEnumerable<T>, IDisposable
where T : IDisposable
{
public EnumerableDispose(IEnumerable<T> source)
{
// TODO: implement
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5583 次 |
最近记录: |