当前位置:  开发笔记 > 编程语言 > 正文

ICollection - 获取单个值

如何解决《ICollection-获取单个值》经验,为你挑选了2个好方法。

从ICollection获取值的最佳方法是什么?我们知道Collection除此之外是空的.



1> 小智..:

林奇,宝贝,是啊......

   var foo = myICollection.OfType().FirstOrDefault();
    // or use a query
    var bar = (from x in myICollection.OfType() where x.SomeProperty == someValue select x)
       .FirstOrDefault();


这是正确的答案.First和FirstOrDefault甚至可以在内部使用IList优化.
FirstOrDefault是在ICollection或IEnumerable(非泛型)上定义的?哪里?什么会起作用:myICollection.OfType ().FirstOrDefault();

2> Chris..:

最简单的方法是:

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;
}

同样,如果它可能是某种类型的您自己的定义具有某种索引访问权限,则可以使用相同的技术.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有