这可能是一个简单的语法问题,但我无法弄清楚.
通常,我会这样做:
public class OrderBook : IEnumerable<PriceLevel>
{
private readonly List<PriceLevel> PriceLevels = new List<PriceLevel>();
public IEnumerator<PriceLevel> GetEnumerator()
{
return PriceLevels.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return PriceLevels.GetEnumerator();
}
}
Run Code Online (Sandbox Code Playgroud)
但我没有列表,而是想使用数组 - 就像这样:
public class ArrayOrderBook : IEnumerable<PriceLevel>
{
private PriceLevel[] PriceLevels = new PriceLevel[500];
public IEnumerator<PriceLevel> GetEnumerator()
{
return PriceLevels.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return PriceLevels.GetEnumerator();
}
}
Run Code Online (Sandbox Code Playgroud)
在IEnumerator IEnumerable.GetEnumerator()似乎精编-但市民IEnumerator<PriceLevel>说,我需要某种形式的铸造-什么是这样做的最佳方式?
威廉
Fil*_*erg 14
试试这个:
public class ArrayOrderBook : IEnumerable<PriceLevel>
{
private PriceLevel[] PriceLevels = new PriceLevel[500];
public IEnumerator<PriceLevel> GetEnumerator()
{
return PriceLevels.AsEnumerable().GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return PriceLevels.GetEnumerator();
}
}
Run Code Online (Sandbox Code Playgroud)
从您自己的IEnumerable<T>实现中可以看出,您需要提供该方法的通用版本和非泛型版本来实现该接口.为此,由于方法具有相同的签名,因此其中一个需要是显式接口实现.在这种情况下List,泛型版本是类中的方法,非泛型版本是显式接口定义,因为通用版本通常更有用.对于数组,它已经具有非泛型版本作为实现,并且它在后续版本中添加了该方法的泛型版本.为避免重大更改,通用版本是显式接口定义.
有很多方法可以解决这个问题.这是三个简单的.
public IEnumerator<PriceLevel> GetEnumerator()
{
return PriceLevels.AsEnumerable().GetEnumerator();
}
public IEnumerator<PriceLevel> GetEnumerator()
{
IEnumerable<PriceLevel> enumerator = PriceLevels;
return enumerator.GetEnumerator();
}
public IEnumerator<PriceLevel> GetEnumerator()
{
return ((IEnumerable<PriceLevel>)PriceLevels).GetEnumerator()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
627 次 |
| 最近记录: |