将 Enumerable.Empty<>() 转换为另一个实现 IEnumerable returns null 的 class

Casting an Enumerable.Empty<>() into another class that implements IEnumerable returns null

我有一个 class 实现了 IEnumerable:

public class A { }
public class B : IEnumerable<A> { } 

在这种情况下,如何将 class B 用作 Enumerable.Empty<A>()? 我的意思是像这样的转换 Enumerable.Empty<A>() as B returns null。为什么会这样?我应该实现任何特定的构造函数或方法吗?还是禁止操作,我应该换个方式做?

Enumerable.Empty<T>()implemented as:

internal class EmptyEnumerable<T>
{
    public static readonly T[] Instance = new T[0];
}

public static IEnumerable<T> Empty<T>()
{
    return EmptyEnumerable<T>.Instance;
}

如果删除缓存空数组的优化,您可以将其重写为:

public static IEnumerable<T> Empty<T>()
{
    return new T[0];
}

所以Enumerable.Empty<T>()只是returns一个T.

类型的空数组

你不会写:

B b = new A[0];

这没有意义:B 不是 A.

实例的数组

同理,不能写:

B b = Enumerable.Empty<A>();