将 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>();
我有一个 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>();