2013-10-28 90 views
2

我創建了一個將被C#代碼使用的模塊,所以我寧願不直接返回LazyList<>。如果我這樣做,C#將不得不引用FSharp.PowerPack,這看起來很奇怪。F#LazyList - > IList

所以我寧願返回一個IList<>,但是當我嘗試做一些事情,如:

let x = LazyList.ofSeq {0..10} 
let y = x :> IList<int32> 

然而,這給我的錯誤:

The type 'LazyList<int> is not compatible with the type 'IList<int>' 

這使我相信,LazyList<>不是implementIList<>。這是真的?

我錯過了什麼?

+0

這[文章](http://stackoverflow.com/q/9201402/2145211)可幫助 – Harrison

+5

'的IList <_>'暴露之類的東西'Count'只意義,如果列表被完全構造,所以'LazyList <_>'沒有實現這個接口是有道理的。 – kvb

+0

@kvb:我正在服用DoctorJones(http://stackoverflow.com/questions/2689986/lazylistt-vs-system-lazylistt-in-asp-net-mvc-2/2690307#2690307)他的話有點.. 。但它肯定是有道理的,它不能從'IList <>' – Andrew

回答

4

確實,LazyList沒有實現IList接口。它雖然實現IEnumerable。

[<Sealed>] 
type LazyList<'T> = 
    interface IEnumerable<'T> 
    interface System.Collections.IEnumerable