ICollection - 获取单个值
从 ICollection 获取值的最佳方式是什么? 除此之外,我们知道该集合是空的。
What is the best way to get a value from a ICollection?
We know the Collection is empty apart from that.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您可以使用 LINQ 来实现此目的:
You can use LINQ for this:.
最简单的方法是:
但如果它实际上是一个泛型集合,则效率不是特别高,因为 IEnumerator 实现了 IDisposable,因此编译器必须放入 try/finally,并在 finally 块中调用 Dispose()。
如果它是非泛型集合,或者您知道泛型集合在其 Dispose() 方法中未实现任何内容,则可以使用以下内容:
如果您知道是否可以实现 IList,则可以执行以下操作:
同样,如果可能会实现将是您自己定义的某种类型,具有某种索引访问,您可以使用相同的技术。
The simplest way to do this is:
But this isn't particularly efficient if it's actually a generic collection because IEnumerator implements IDisposable, so the compiler has to put in a try/finally, with a Dispose() call in the finally block.
If it's a non-generic collection, or you know the generic collection implements nothing in its Dispose() method, then the following can be used:
If you know if may implement IList, you can do this:
Likewise, if it's likely it'll be of a certain type of your own definition that has some kind of indexed access, you can use the same technique.
这种方式速度慢,但是使用起来很简单。
This way is slow, but very simple to use.
如果没有泛型,并且由于
ICollection
实现了IEnumerable
,您可以像示例 1 中那样执行操作。使用泛型时,您只需像示例 2 中那样执行操作:Without generics and because
ICollection
implementsIEnumerable
you can do like in example 1. With generics you simple need to do like example 2:如果您知道您的集合只有一项,并且应该只有一项,则可以使用 Linq 扩展方法
Single()
。这会将
ICollection
转换为包含该集合的单个项目的T
对象。 如果集合的长度为 0 或大于 1,则会抛出InvalidOperationException
。If you know your collection has only one item, should only ever have one item, you can use the Linq extension method
Single()
.This converts a
ICollection<T>
into aT
object containing the single item of that collection. If the length of the collection is 0, or more than one, this will throw anInvalidOperationException
.