EnumerableComCollection<TComEnumerator,TEnumerated> 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
围绕 COM 样式 IEnumXXX 接口提供 IEnumerable 包装器的类型的泛型基类。
generic <typename TComEnumerator, typename TEnumerated>
public ref class EnumerableComCollection abstract : Microsoft::VisualStudio::Shell::IComEnumeratorRelay<TComEnumerator, TEnumerated>, System::Collections::Generic::IEnumerable<TEnumerated>
public abstract class EnumerableComCollection<TComEnumerator,TEnumerated> : Microsoft.VisualStudio.Shell.IComEnumeratorRelay<TComEnumerator,TEnumerated>, System.Collections.Generic.IEnumerable<TEnumerated>
type EnumerableComCollection<'ComEnumerator, 'Enumerated> = class
interface seq<'Enumerated>
interface IEnumerable
interface IComEnumeratorRelay<'ComEnumerator, 'Enumerated>
Public MustInherit Class EnumerableComCollection(Of TComEnumerator, TEnumerated)
Implements IComEnumeratorRelay(Of TComEnumerator, TEnumerated), IEnumerable(Of TEnumerated)
类型参数
- TComEnumerator
COM 枚举器类型 (例如 IEnumString)
- TEnumerated
由 TComEnumerator
(枚举的类型,例如字符串)
- 继承
-
EnumerableComCollection<TComEnumerator,TEnumerated>
- 派生
- 实现
注解
从此类派生的类将 COM 样式的 IEnumXXX 接口调整为可由 foreach 语句处理的形式。 理想情况下,此泛型类本身就足够了,而无需派生类执行该作业,但必须定义 C# 泛型的严格性会阻止这种情况。
此类必须调用 COM 枚举器上包装 (Next、Skip 等 ) 的方法,但泛型类型只能访问参数化类型约束中指定的参数化类型的属性和方法。 具体而言,如果我们在 TComEnumerator 上指定了告知编译器 TComEnumerator 实现 Next 的约束,则只能调用 TComEnumerator.Next。
COM IEnumXXX 接口是强类型 (即 IEnumXXX.Next 返回 XXX 对象的数组) 且没有公共基类,因此我们无法直接在 TComEnumerator 上放置约束。 这就是 IComEnumeratorRelay 的用武之地:EnumerableComCollection 要求其派生类实现强类型 IComEnumeratorRelay 接口,该接口允许泛型类型调用 COM 枚举器,而无需在 TComEnumerator 上放置约束。
构造函数
字段
DefaultCacheSize |
默认缓存大小。 |
方法
Clone(TComEnumerator, TComEnumerator) |
使用指定的枚举器 克隆项。 |
GetEnumerator() |
获取枚举器。 |
NextItems(TComEnumerator, UInt32, TEnumerated[], UInt32) |
获取指定数量的项。 |
Reset(TComEnumerator) |
重置集合的计数器。 |
Skip(TComEnumerator, UInt32) |
跳过指定数量的项。 |
显式接口实现
IEnumerable.GetEnumerator() |
获取枚举器。 |
扩展方法
EmptyIfNull<T>(IEnumerable<T>) |
如果枚举不为 null,则返回此枚举。 如果为 null,则返回空枚举。 |