从ICollection获取值的最佳方法是什么?我们知道Collection除此之外是空的.
林奇,宝贝,是啊......
var foo = myICollection.OfType().FirstOrDefault(); // or use a query var bar = (from x in myICollection.OfType () where x.SomeProperty == someValue select x) .FirstOrDefault();
最简单的方法是:
foreach(object o in collection) { return o; }
但是如果它实际上是一个通用集合,这并不是特别有效,因为IEnumerator实现了IDisposable,所以编译器必须放入try/finally,在finally块中调用Dispose().
如果它是非泛型集合,或者您知道泛型集合在其Dispose()方法中没有实现任何内容,则可以使用以下内容:
IEnumerator en = collection.GetEnumerator(); en.MoveNext(); return en.Current;
如果您知道是否可以实现IList,则可以执行以下操作:
IList iList = collection as IList; if (iList != null) { // Implements IList, so can use indexer return iList[0]; } // Use the slower way foreach (object o in collection) { return o; }
同样,如果它可能是某种类型的您自己的定义具有某种索引访问权限,则可以使用相同的技术.