草庐IT

generic-collections

全部标签

c# - 为什么 BCL Collections 使用结构体枚举器,而不是类?

我们都知道mutablestructsareevil一般来说。我也很确定,因为IEnumerable.GetEnumerator()返回类型IEnumerator,这些结构会立即装入引用类型,这比它们一开始只是引用类型的成本更高。那么,为什么在BCL泛型集合中,所有枚举器都是可变结构?当然必须有一个很好的理由。我唯一想到的是可以轻松复制结构,从而在任意点保留枚举器状态。但是添加一个Copy()IEnumerator的方法接口(interface)本来就不那么麻烦,所以我不认为这本身就是一个合乎逻辑的理由。即使我不同意设计决定,我也希望能够理解其背后的原因。

c# - 为什么 BCL Collections 使用结构体枚举器,而不是类?

我们都知道mutablestructsareevil一般来说。我也很确定,因为IEnumerable.GetEnumerator()返回类型IEnumerator,这些结构会立即装入引用类型,这比它们一开始只是引用类型的成本更高。那么,为什么在BCL泛型集合中,所有枚举器都是可变结构?当然必须有一个很好的理由。我唯一想到的是可以轻松复制结构,从而在任意点保留枚举器状态。但是添加一个Copy()IEnumerator的方法接口(interface)本来就不那么麻烦,所以我不认为这本身就是一个合乎逻辑的理由。即使我不同意设计决定,我也希望能够理解其背后的原因。

c# - System.Collections.Generic.List 不包含 'Select' 的定义

这个问题在这里已经有了答案:System.Collections.Generic.IEnumerable'doesnotcontainanydefinitionfor'ToList'(5个答案)关闭2年前。这个错误发生在我的“Views”文件夹中的许多文件中:'System.Collection.GenericList'doesnotcontainadefinitionfor'Select'acceptingafirstargumentoftype'System.Collections.GenericList'couldbefound(areyoumissingausingdirect

c# - System.Collections.Generic.List 不包含 'Select' 的定义

这个问题在这里已经有了答案:System.Collections.Generic.IEnumerable'doesnotcontainanydefinitionfor'ToList'(5个答案)关闭2年前。这个错误发生在我的“Views”文件夹中的许多文件中:'System.Collection.GenericList'doesnotcontainadefinitionfor'Select'acceptingafirstargumentoftype'System.Collections.GenericList'couldbefound(areyoumissingausingdirect

c# - ThreadStatic 与线程本地 <T> : is generic better than attribute?

[ThreadStatic]是使用属性定义的,而ThreadLocal使用通用。为什么选择不同的设计方案?在这种情况下使用泛型而不是属性有哪些优点和缺点? 最佳答案 评论中提到的博客文章没有明确说明,但我发现非常重要的是[ThreadStatic]不会为每个线程自动初始化东西。例如,假设您有这个:[ThreadStatic]privatestaticintFoo=42;使用它的第一个线程将看到Foo初始化为42.但后续线程不会。初始化程序仅适用于第一个线程。因此,您最终不得不编写代码来检查它是否已初始化。ThreadLocal通过让

c# - ThreadStatic 与线程本地 <T> : is generic better than attribute?

[ThreadStatic]是使用属性定义的,而ThreadLocal使用通用。为什么选择不同的设计方案?在这种情况下使用泛型而不是属性有哪些优点和缺点? 最佳答案 评论中提到的博客文章没有明确说明,但我发现非常重要的是[ThreadStatic]不会为每个线程自动初始化东西。例如,假设您有这个:[ThreadStatic]privatestaticintFoo=42;使用它的第一个线程将看到Foo初始化为42.但后续线程不会。初始化程序仅适用于第一个线程。因此,您最终不得不编写代码来检查它是否已初始化。ThreadLocal通过让

C#:List<T> 和 Collection<T> 之间的区别(CA1002,不要公开通用列表)

这个问题在这里已经有了答案:CollectionversusListwhatshouldyouuseonyourinterfaces?(8个答案)关闭8年前。尝试在此处的项目上运行运行代码分析,并收到许多警告,内容如下:CA1002:Microsoft.Design:Change'ListSomeType>'in'SomeClass.SomeProtectedOrPublicProperty'touseCollection,ReadOnlyCollectionorKeyedCollection我为什么要使用Collection而不是List?当我查看msdn文档时,它们似乎几乎相等。看

C#:List<T> 和 Collection<T> 之间的区别(CA1002,不要公开通用列表)

这个问题在这里已经有了答案:CollectionversusListwhatshouldyouuseonyourinterfaces?(8个答案)关闭8年前。尝试在此处的项目上运行运行代码分析,并收到许多警告,内容如下:CA1002:Microsoft.Design:Change'ListSomeType>'in'SomeClass.SomeProtectedOrPublicProperty'touseCollection,ReadOnlyCollectionorKeyedCollection我为什么要使用Collection而不是List?当我查看msdn文档时,它们似乎几乎相等。看

c# - LINQ 环 : Any() vs Contains() for Huge Collections

给定大量对象,以下各项之间是否存在性能差异?Collection.Contains:myCollection.Contains(myElement)Enumerable.Any:myCollection.Any(currentElement=>currentElement==myElement) 最佳答案 Contains()是一个实例方法,其性能很大程度上取决于集合本身。例如,List上的Contains()是O(n),而HashSet上的Contains()是O(1)。Any()是一种扩展方法,它将简单地遍历集合,将委托(del

c# - LINQ 环 : Any() vs Contains() for Huge Collections

给定大量对象,以下各项之间是否存在性能差异?Collection.Contains:myCollection.Contains(myElement)Enumerable.Any:myCollection.Any(currentElement=>currentElement==myElement) 最佳答案 Contains()是一个实例方法,其性能很大程度上取决于集合本身。例如,List上的Contains()是O(n),而HashSet上的Contains()是O(1)。Any()是一种扩展方法,它将简单地遍历集合,将委托(del