类型<sometype>不可枚举</sometype>

时间:2009-09-23 18:55:46

标签: c# c#-3.0

我有一个列表,我希望能够枚举,所以我可以做foreach和类似的事情。

类(Symbol.WPAN.Bluetooth.RemoteDevices)具有符号表示的数组(即[1])

无论如何要将它包起来并使其可枚举?

(顺便说一下,我知道我可以使用普通的for循环而不是foreach循环。我猜这个问题本质上是学术性的。)

1 个答案:

答案 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);