2009-09-23 67 views
0

我有一個列表,我希望能夠枚舉,所以我可以做foreach和類似的事情。類型<sometype>不可枚舉

類(Symbol.WPAN.Bluetooth.RemoteDevices)具有陣列狀符號(即此[1])

反正有包裹此起來,並使其可枚舉?

(順便說一句,我知道我可以只使用一個正常的循環,而不是一個foreach循環,我想這個問題在本質上是有點學術)

回答

8

假設它也具有計數功能,你可以這樣做以下

public static IEnumerable<RemoteDevice> MakeEnumerable(this RemoteDevices devices) { 
    for (var i = 0; i < devices.Count; i++){ 
    yield return devices[i]; 
    } 
} 

一個更通用的解決方案將是以下

public static IEnumerable<TItem> MakeEnumerable<TSource,TItem>(
    this TSource source, 
    Func<TSource,int,TItem> getItem, 
    Func<TSource,int> getCount) { 
    var count = getCount(source); 
    for (var i = 0; i < count; i++) { 
    yield return getItem(source,i); 
    } 
} 

... 
var devices = GetTheDevicesInstance(); 
var e = devices.MakeEnumerable((s,i) => s[i], (s) => s.Count); 
+0

感謝偉大的答案! – Vaccano 2009-09-23 19:06:31