我有一个列表,我希望能够枚举,所以我可以做foreach和类似的事情。
类(Symbol.WPAN.Bluetooth.RemoteDevices)具有符号表示的数组(即[1])
无论如何要将它包起来并使其可枚举?
(顺便说一下,我知道我可以使用普通的for循环而不是foreach循环。我猜这个问题本质上是学术性的。)
答案 0 :(得分:8)
假设它还具有Count功能,您可以执行以下操作
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);