C#容器

集合接口和类型

接口 说明
IEnumerable 如果将foreach语句用于集合,就需要IEnumerable接口。这个接口定义了方法GetEnumerator(),它返回一个实现了IEnumerator接口的枚举
ICollection ICollection接口由泛型集合类实现。使用这个接口可以获得集合中的元素个数(Count属性),把集合复制到数组中(CopyTo()方法),还可以从集合中添加和删除元素(Add()、Remove()、Clear())
IList IList接口用于可通过位置访问其中的元素列表,这个接口定义了一个索引器,可以在集合的指定位置插入或删除某些项(Insert()和RemoveAt()方法)。IList接口派生自ICollection接口
ISet ISet接口由集实现。集允许合并不同的集,获得两个集的交集,检查两个集是否重叠。ISet接口派生自ICollection接口
IDictionary<TKey, TValue> IDictionary<TKey, TValue>接口由包含键和值的泛型集合类实现。使用这个接口可以访问所有的键和值,使用键类型的索引器可以访问某些项,还可以添加或删除某些项。
ILookup<TKey, TValue> ILookup<TKey, TValue>接口类似于IDictionary<TKey, TValue>接口,实现该接口的集合有键和值,且可以通过一个键包含多个值
IComparer 接口IComparer由比较器实现,通过Compare()方法给集合中的元素排序
IEqualityComparer 接口IEqualityComparer由一个比较器实现,该比较器可用于字典中的键。使用这个接口,可以对对象进行相等性比较

Array

Array提供一些方法,用于创建、处理、搜索数组并对数组进行排序,从而充当公共语言运行时中所有数组的基类。大小是固定的。

Array类是一个抽象类,所以不能使用构造函数来创建数组。但除了可以使用C#语法创建数组实例之外,还可以使用静态方法CreateInstance()创建数组。

Array 可以具有任何下限,但默认情况下它的下限为零。 使用 CreateInstance创建 Array 类的实例时,可以定义其他下限。多维 Array 每个维度可以具有不同的界限。 数组最多可以有32个维度。

数组大小限制为总计4000000000个元素,在任何给定维度中限制为0X7FEFFFFF 的最大索引(字节数组的0X7FFFFFC7 和单字节结构的数组)。

属性

方法 作用
IsFixedSize 获取一个值,该值指示 Array 是否具有固定大小。
IsReadOnly 获取一个值,用于指示 Array 是否为只读。
IsSynchronized 获取一个值,该值指示是否同步对 Array 的访问(确保线程安全)。
Length 获取 Array 的所有维度中的元素总数。
LongLength 获取一个 64 位整数,该整数表示 Array 的所有维数中元素的总数。
Rank 获取 Array 的秩(维数)。 例如,一维数组返回 1,二维数组返回 2,依次类推。
SyncRoot 获取用于同步对 Array 的访问的对象。

方法

方法 作用
AsReadOnly(T[]) 返回指定数组的只读包装。
BinarySearch(Array, Int32, Int32, Object) 使用由一维排序数组中每个元素和指定的值实现的 IComparable 接口,在该数组的一个元素范围内搜索值。
BinarySearch(Array, Int32, Int32, Object, IComparer) 使用指定 IComparer 接口,在一维排序数组的某个元素范围中搜索值。
BinarySearch(Array, Object) 使用由数组中每个元素和指定对象实现的 IComparable 接口,在整个一维排序数组中搜索特定元素。
BinarySearch(Array, Object, IComparer) 使用指定 IComparer 接口,在整个一维排序数组中搜索值。
BinarySearch(T[], Int32, Int32, T) 使用由 IComparable 中每个元素和指定值实现的 Array 泛型接口,在一维排序数组的某个元素范围中搜索值。
BinarySearch(T[], Int32, Int32, T, IComparer) 使用指定 IComparer 泛型接口,在一维排序数组的某个元素范围中搜索值。
BinarySearch(T[], T) 使用由 IComparable 中每个元素和指定对象实现的 Array 泛型接口,在整个一维排序数组中搜索特定元素。
BinarySearch(T[], T, IComparer) 使用指定 IComparer 泛型接口,在整个一维排序数组中搜索值。
Clear(Array, Int32, Int32) 将数组中的某个范围的元素设置为每个元素类型的默认值。
Clone() 创建 Array 的浅表副本。
ConstrainedCopy(Array, Int32, Array, Int32, Int32) 复制 Array 中的一系列元素(从指定的源索引开始),并将它们粘贴到另一 Array 中(从指定的目标索引开始)。保证在复制未成功完成的情况下撤消所有更改。
ConvertAll<TInput,TOutput>(TInput[], Converter<TInput,TOutput>) 将一种类型的数组转换为另一种类型的数组。
Copy(Array, Array, Int32) 从第一个元素开始复制 Array 中的一系列元素,将它们粘贴到另一 Array 中(从第一个元素开始)。 长度指定为 32 位整数。
Copy(Array, Array, Int64) 从第一个元素开始复制 Array 中的一系列元素,将它们粘贴到另一 Array 中(从第一个元素开始)。 长度指定为 64 位整数。
Copy(Array, Int32, Array, Int32, Int32) 复制 Array 中的一系列元素(从指定的源索引开始),并将它们粘贴到另一 Array 中(从指定的目标索引开始)。 长度和索引指定为 32 位整数。
Copy(Array, Int64, Array, Int64, Int64) 复制 Array 中的一系列元素(从指定的源索引开始),并将它们粘贴到另一 Array 中(从指定的目标索引开始)。 长度和索引指定为 64 位整数。
CopyTo(Array, Int32) 从指定的目标数组索引处开始,将当前一维数组的所有元素复制到指定的一维数组中。 索引指定为 32 位整数。
CopyTo(Array, Int64) 从指定的目标数组索引处开始,将当前一维数组的所有元素复制到指定的一维数组中。 索引指定为 64 位整数。
CreateInstance(Type, Int32) 创建使用从零开始的索引、具有指定 Array 和长度的一维 Type。
CreateInstance(Type, Int32, Int32) 创建使用从零开始的索引、具有指定 Array 和维长的二维 Type。
CreateInstance(Type, Int32, Int32, Int32) 创建使用从零开始的索引、具有指定 Array 和维长的三维 Type。
CreateInstance(Type, Int32[]) 创建索引从零开始、具有指定 Array 和维长的多维 Type。 维的长度在一个 32 位整数数组中指定。
CreateInstance(Type, Int32[], Int32[]) 创建具有指定下限、指定 Array 和维长的多维 Type。
CreateInstance(Type, Int64[]) 创建索引从零开始、具有指定 Array 和维长的多维 Type。 维的长度在一个 64 位整数数组中指定。
Empty() 返回一个空数组。
Equals(Object) 确定指定的对象是否等于当前对象。(继承自 Object)
Exists(T[], Predicate) 确定指定数组包含的元素是否与指定谓词定义的条件匹配。
Find(T[], Predicate) 搜索与指定谓词所定义的条件相匹配的元素,并返回整个 Array 中的第一个匹配元素。
FindAll(T[], Predicate) 检索与指定谓词定义的条件匹配的所有元素。
FindIndex(T[], Int32, Int32, Predicate) 搜索与指定谓词所定义的条件相匹配的一个元素,并返回Array中从指定的索引开始、包含指定元素个数的元素范围内第一个匹配项的从零开始的索引。
FindIndex(T[], Int32, Predicate) 搜索与指定谓词所定义的条件相匹配的元素,并返回 Array 中从指定索引到最后一个元素的元素范围内第一个匹配项的从零开始的索引。
FindIndex(T[], Predicate) 搜索与指定谓词所定义的条件相匹配的元素,并返回整个 Array 中第一个匹配元素的从零开始的索引。
FindLast(T[], Predicate) 搜索与指定谓词所定义的条件相匹配的元素,并返回整个 Array 中的最后一个匹配元素。
FindLastIndex(T[], Int32, Int32, Predicate) 搜索与指定谓词所定义的条件相匹配的元素,并返回 Array 中包含指定元素个数、到指定索引结束的元素范围内最后一个匹配项的从零开始的索引。
FindLastIndex(T[], Int32, Predicate) 搜索与由指定谓词定义的条件相匹配的元素,并返回 Array 中从第一个元素到指定索引的元素范围内最后一个匹配项的从零开始的索引。
FindLastIndex(T[], Predicate) 搜索与指定谓词所定义的条件相匹配的元素,并返回整个 Array 中最后一个匹配元素的从零开始的索引。
ForEach(T[], Action) 对指定数组的每个元素执行指定操作。
GetEnumerator() 返回 IEnumerator 的 Array。
GetHashCode() 作为默认哈希函数。(继承自 Object)
GetLength(Int32) 获取一个 32 位整数,该整数表示 Array 的指定维中的元素数。
GetLongLength(Int32) 获取一个 64 位整数,该整数表示 Array 的指定维中的元素数。
GetLowerBound(Int32) 获取数组中指定维度第一个元素的索引。
GetType() 获取当前实例的 Type。(继承自 Object)
GetUpperBound(Int32) 获取数组中指定维度最后一个元素的索引。
GetValue(Int32) 获取一维 Array 中指定位置的值。 索引指定为 32 位整数。
GetValue(Int32, Int32) 获取二维 Array 中指定位置的值。 索引指定为 32 位整数。
GetValue(Int32, Int32, Int32) 获取三维 Array 中指定位置的值。 索引指定为 32 位整数。
GetValue(Int32[]) 获取多维 Array 中指定位置的值。 索引指定为一个 32 位整数数组。
GetValue(Int64) 获取一维 Array 中指定位置的值。 索引指定为 64 位整数。
GetValue(Int64, Int64) 获取二维 Array 中指定位置的值。 索引指定为 64 位整数。
GetValue(Int64, Int64, Int64) 获取三维 Array 中指定位置的值。 索引指定为 64 位整数。
GetValue(Int64[]) 获取多维 Array 中指定位置的值。 索引指定为一个 64 位整数数组。
IndexOf(Array, Object) 在一个一维数组中搜索指定对象,并返回其首个匹配项的索引。
IndexOf(Array, Object, Int32) 在一个一维数组的一系列元素中搜索指定对象,然后返回其首个匹配项的索引。 该元素系列的范围为从指定索引到该数组结尾。
IndexOf(Array, Object, Int32, Int32) 在一个一维数组的一系列元素中搜索指定对象,然后返回其首个匹配项的索引。 该元素系列的范围从指定数量的元素的指定索引开始。
IndexOf(T[], T) 在一个一维数组中搜索指定对象,并返回其首个匹配项的索引。
IndexOf(T[], T, Int32) 在一个一维数组的一系列元素中搜索指定对象,然后返回其首个匹配项的索引。 该元素系列的范围为从指定索引到该数组结尾。
IndexOf(T[], T, Int32, Int32) 在一个一维数组的一系列元素中搜索指定对象,然后返回其首个匹配项的索引。 该元素系列的范围从指定数量的元素的指定索引开始。
Initialize() 通过调用值类型的无参数构造函数,初始化值类型 Array 的每一个元素。
LastIndexOf(Array, Object) 在整个一维 Array 中搜索指定的对象,并返回最后一个匹配项的索引。
LastIndexOf(Array, Object, Int32) 搜索指定的对象,并返回一维 Array 中从第一个元素到指定索引的元素范围内最后一个匹配项的索引。
LastIndexOf(Array, Object, Int32, Int32) 搜索指定的对象并返回一维 Array 中包含指定数目元素且在指定索引处结尾的元素范围内的最后一个匹配项的索引。
LastIndexOf(T[], T) 搜索指定的对象,并返回整个 Array 中最后一个匹配项的索引。
LastIndexOf(T[], T, Int32) 搜索指定的对象并返回 Array 中从第一个元素到指定索引的元素范围内最后一个匹配项的索引。
LastIndexOf(T[], T, Int32, Int32) 搜索指定的对象,并返回 Array 中包含指定数目元素并在指定索引处结尾的元素范围内的最后一个匹配项的索引。
MemberwiseClone() 创建当前 Object 的浅表副本。(继承自 Object)
Resize(T[], Int32) 将一维数组的元素数更改为指定的新大小。
Reverse(Array) 反转整个一维 Array 中元素的顺序。
Reverse(Array, Int32, Int32) 反转一维 Array 中元素子集的顺序。
SetValue(Object, Int32) 将值设置为一维 Array 中指定位置的元素。 索引指定为 32 位整数。
SetValue(Object, Int32, Int32) 将某值设置给二维 Array 中指定位置的元素。 索引指定为 32 位整数。
SetValue(Object, Int32, Int32, Int32) 将值设置为三维 Array 中指定位置的元素。 索引指定为 32 位整数。
SetValue(Object, Int32[]) 将值设置为多维 Array 中指定位置的元素。 索引指定为一个 32 位整数数组。
SetValue(Object, Int64) 将值设置为一维 Array 中指定位置的元素。 索引指定为 64 位整数。
SetValue(Object, Int64, Int64) 将某值设置给二维 Array 中指定位置的元素。 索引指定为 64 位整数。
SetValue(Object, Int64, Int64, Int64) 将值设置为三维 Array 中指定位置的元素。 索引指定为 64 位整数。
SetValue(Object, Int64[]) 将值设置为多维 Array 中指定位置的元素。 索引指定为一个 64 位整数数组。
Sort(Array) 使用 Array 中每个元素的 IComparable 实现,对整个一维 Array 中的元素进行排序。
Sort(Array, Array) 基于第一个 Array 中的关键字,使用每个关键字的 Array 实现,对两个一维 IComparable 对象(一个包含关键字,另一个包含对应的项)进行排序。
Sort(Array, Array, IComparer) 基于第一个 Array 中的关键字,使用指定的 Array,对两个一维 IComparer 对象(一个包含关键字,另一个包含对应的项)进行排序。
Sort(Array, Array, Int32, Int32) 基于第一个 Array 中的关键字,使用每个关键字的 Array 实现,对两个一维 IComparable 对象(一个包含关键字,另一个包含对应的项)的部分元素进行排序。
Sort(Array, Array, Int32, Int32, IComparer) 基于第一个 Array 中的关键字,使用指定的 Array,对两个一维 IComparer 对象(一个包含关键字,另一个包含对应的项)的部分元素进行排序。
Sort(Array, IComparer) 使用指定的 Array,对一维 IComparer 中的元素进行排序。
Sort(Array, Int32, Int32) 使用 Array 中每个元素的 IComparable 实现,对一维 Array 中的部分元素进行排序。
Sort(Array, Int32, Int32, IComparer) 使用指定的 Array,对一维 IComparer 中的部分元素进行排序。
Sort(T[]) 使用 Array 中每个元素的 IComparable 泛型接口实现,对整个 Array 中的元素进行排序。
Sort(T[], Comparison) 使用指定的 Array,对 Comparison 中的元素进行排序。
Sort(T[], IComparer) 使用指定的 Array 泛型接口,对 IComparer 中的元素进行排序。
Sort(T[], Int32, Int32) 使用 Array 中每个元素的 IComparable 泛型接口实现,对 Array 中元素范围内的元素进行排序。
Sort(T[], Int32, Int32, IComparer) 使用指定的 Array 泛型接口,对 IComparer 中的部分元素进行排序。
Sort<TKey,TValue>(TKey[], TValue[]) 基于第一个 Array 中的键,使用每个键的 Array 泛型接口实现,对一对 IComparable 对象(一个包含键,另一个包含对应的项)进行排序。
Sort<TKey,TValue>(TKey[], TValue[], IComparer) 基于第一个 Array 中的关键字,使用指定的 Array 泛型接口,对两个 IComparer 对象(一个包含关键字,另一个包含对应的项)进行排序。
Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32) 基于第一个 Array 中的键,使用每个键的 Array 泛型接口实现,对两个 IComparable 对象(一个包含键,另一个包含对应的项)的部分元素进行排序。
Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32, IComparer) 基于第一个 Array 中的关键字,使用指定的 Array 泛型接口,对两个 IComparer 对象(一个包含关键字,另一个包含对应的项)的部分元素进行排序。
ToString() 返回表示当前对象的字符串。(继承自 Object)
TrueForAll(T[], Predicate) 确定数组中的每个元素是否都与指定谓词定义的条件匹配。

列表List

.NET Framework为动态列表提供了泛型类List。这个类实现了IList、ICollection、IEnumerable、IList、ICollection和IEnumerable接口。

属性

属性 作用
AllowDrop 获取或设置一个值,该值指示此元素能否用作拖放操作的目标。(继承自 ContentElement)
AreAnyTouchesCaptureds 获取一个值,该值指示在此元素上是否至少捕获了一次触摸。(继承自 ContentElement)
AreAnyTouchesCapturedWithin 获取一个值,该值指示在此元素或其可视化树中的任何子元素上是否至少捕获了一次触摸。(继承自 ContentElement)
AreAnyTouchesDirectlyOver 获取一个值,该值指示在此元素上是否至少按下了一次触摸设备。(继承自 ContentElement)
AreAnyTouchesOver 获取一个值,该值指示在此元素或其可视化树中的任何子元素上是否至少按下了一次触摸设备。(继承自 ContentElement)
Background 获取或设置用于填充内容区域背景的 Brush。(继承自 TextElement)
BindingGroup 获取或设置用于该元素的 BindingGroup。(继承自 FrameworkContentElement)
BorderBrush 获取或设置绘制元素边框时使用的 Brush。(继承自 Block)
BorderThickness 获取或设置元素的边框粗细。(继承自 Block)
BreakColumnBefore 获取或设置一个值,该值指示当元素参与使用了分栏的内容呈现时,是否自动在此元素之前插入一个分栏符。(继承自 Block)
BreakPageBefore 获取或设置一个值,该值指示是否自动在此元素之前插入一个分页符。(继承自 Block)
ClearFloaters 获取或设置某个 Floater 元素所包含的任何 Block 元素的重新定位方向。(继承自 Block)
CommandBindings 获取与此元素关联的 CommandBinding 对象的集合。(继承自 ContentElement)
ContentEnd 获取表示元素中内容末尾的 TextPointer。(继承自 TextElement)
ContentStart 获取表示元素中内容开头的 TextPointer。(继承自 TextElement)
ContextMenu 获取或设置每当通过用户界面 (UI) 从此元素中请求上下文菜单时应该显示的上下文菜单元素。(继承自 FrameworkContentElement)
Cursor 获取或设置在鼠标指针位于此元素上时显示的光标。(继承自 FrameworkContentElement)
DataContext 获取或设置元素参与数据绑定时的数据上下文。(继承自 FrameworkContentElement)
DefaultStyleKey 获取或设置用于在主题中查找此控件的样式模板的键。(继承自 FrameworkContentElement)
DependencyObjectType 获取对此实例的 DependencyObjectType 类型进行包装的 CLR。(继承自 DependencyObject)
Dispatcher 获取与此 Dispatcher 关联的 DispatcherObject。(继承自 DispatcherObject)
ElementEnd 获取表示紧接元素末尾之后位置的 TextPointer。(继承自 TextElement)
ElementStart 获取表示紧邻元素开头之前位置的 TextPointer。(继承自 TextElement)
FlowDirection 获取或设置 Block 元素中内容流的相对方向。(继承自 Block)
Focusable 获取或设置一个值,该值指示元素能否得到焦点。(继承自 ContentElement)
FocusVisualStyle 获取或设置一个对象,该对象允许自定义此元素在捕获到键盘焦点时要应用于此元素的外观、效果或其他样式特征。(继承自 FrameworkContentElement)
FontFamily 获取或设置元素内容的首选顶级字体系列。(继承自 TextElement)
FontSize 获取或设置元素内容的字体大小。(继承自 TextElement)
FontStretch 获取或设置元素内容的字体拉伸特征。(继承自 TextElement)
FontStyle 获取或设置元素内容的字体样式。(继承自 TextElement)
FontWeight 获取或设置元素内容的顶级字体粗细。(继承自 TextElement)
ForceCursor 获取或设置一个值,该值指示此 FrameworkContentElement 是否应该强制用户界面 (UI) 按照此实例的 Cursor 属性所声明的方式呈现光标。(继承自 FrameworkContentElement)
Foreground 获取或设置要应用于元素内容的 Brush。(继承自 TextElement)
HasAnimatedProperties 获取一个值,该值指示此元素是否具有任何进行动画处理的属性。(继承自 ContentElement)
InputBindings 获取与此元素关联的输入绑定的集合。(继承自 ContentElement)
InputScope 获取或设置此 FrameworkContentElement 使用的输入的上下文。(继承自 FrameworkContentElement)
IsEnabled 获取或设置一个值,该值指示是否在用户界面 (UI) 中启用了此元素。(继承自 ContentElement)
IsEnabledCore 获取一个值,该值成为派生类中 IsEnabled 的返回值。(继承自 ContentElement)
IsFocused 获取一个值,该值确定此元素是否具有逻辑焦点。(继承自 ContentElement)
IsHyphenationEnabled 获取或设置一个值,该值指示是否启用文字的自动断字功能。(继承自 Block)
IsInitialized 获取一个值,该值指示是否已通过将此元素作为可扩展应用程序标记语言 (XAML) 加载或显式调用它的 EndInit() 方法初始化此元素。(继承自 FrameworkContentElement)
IsInputMethodEnabled 获取一个值,该值指示是否启用输入法系统(如 输入法编辑器 (IME))来处理此元素的输入。(继承自 ContentElement)
IsKeyboardFocused 获取一个值,该值表示此元素是否具有键盘焦点。(继承自 ContentElement)
IsKeyboardFocusWithin 获取一个值,该值指示键盘焦点是否位于元素或子元素内的任意位置。(继承自 ContentElement)
IsLoaded 获取一个值,该值指示是否已加载此元素以供显示。(继承自 FrameworkContentElement)
IsMouseCaptured 获取一个值,该值指示此元素是否捕获了鼠标。(继承自 ContentElement)
IsMouseCaptureWithin 获取一个值,该值确定此元素或其元素树中的子元素是否具有鼠标捕获。(继承自 ContentElement)
IsMouseDirectlyOver 获取一个值,该值指示在考虑元素组合的情况下,鼠标指针的位置是否对应于命中测试结果。(继承自 ContentElement)
IsMouseOver 获取一个值,该值指示鼠标指针是否位于此元素(包括可视子元素或其控件组合)上。(继承自 ContentElement)
IsSealed 获取一个值,该值指示此实例当前是否为密封的(只读)。(继承自 DependencyObject)
IsStylusCaptured 获取一个值,该值指示是否将触笔捕获到此元素。(继承自 ContentElement)
IsStylusCaptureWithin 获取一个值,该值确定此元素(包括子元素和控件组合)是否具有触笔捕获。(继承自 ContentElement)
IsStylusDirectlyOver 获取一个值,该值指示触笔的位置是否与考虑元素组合的命中测试结果相对应。(继承自 ContentElement)
IsStylusOver 获取一个值,该值指示触笔是否位于此元素(包括可视子元素)上。(继承自 ContentElement)
Language 获取或设置应用于单个元素的本地化/全球化语言信息。(继承自 FrameworkContentElement)
LineHeight 获取或设置各行内容的高度。(继承自 Block)
LineStackingStrategy 获取或设置为块级别流内容元素内的每行文本确定行框的方式。(继承自 Block)
ListItems 获取一个 ListItemCollection,其中包含组成 ListItem 的内容的 List 元素。
LogicalChildren 获取一个可用于迭代该元素的逻辑子元素的枚举数。(继承自 TextElement)
Margin 获取或设置元素的边距粗细。(继承自 Block)
MarkerOffset 获取或设置每个 ListItem 元素内容与列表标记近边缘之间的所需距离。
MarkerStyle 获取或设置 List 的标记样式。
Name 获取或设置元素的标识名称。 该名称提供实例引用,以便编程代码隐藏(如事件处理程序代码)引用曾在 XAML 的分析过程中构造的元素。(继承自 FrameworkContentElement)
NextBlock 获取紧随当前 Block 元素之后的同级 Block 元素。(继承自 Block)
OverridesDefaultStyle 获取或设置一个值,该值指示此元素是否合并了主题样式的样式属性。(继承自 FrameworkContentElement)
Padding 获取或设置元素的填充厚度。(继承自 Block)
Parent 获取此元素的逻辑树中的父级。(继承自 FrameworkContentElement)
PreviousBlock 获取紧邻当前 Block 元素之前的同级 Block 元素。(继承自 Block)
Resources 获取或设置当前本地定义的资源字典。(继承自 FrameworkContentElement)
SiblingBlocks 获取一个 Block 元素的集合,这些元素是当前 Block 元素的同级元素。
StartIndex 获取或设置用于标记有序列表中的项的起始索引。
Style 获取或设置此元素要使用的样式。(继承自 FrameworkContentElement)
Tag 获取或设置任意对象值,该值可用于存储关于此元素的自定义信息。(继承自 FrameworkContentElement)
TemplatedParent 获取对此元素的模板父级的引用。 如果该元素不是通过模板创建的,则此属性无关。(继承自 FrameworkContentElement)
TextAlignment 获取或设置文本内容的水平对齐方式。(继承自 Block)
TextEffects 获取或设置应用于元素内容的文本效果集合。(继承自 TextElement)
ToolTip 获取或设置在用户界面 (UI) 中为此元素显示的工具提示对象。(继承自 FrameworkContentElement)
TouchesCaptured 获取在此元素上捕获的所有触摸设备。(继承自 ContentElement)
TouchesCapturedWithin 获取在此元素或其可视化树中的任何子元素上捕获的所有触摸设备。(继承自 ContentElement)
TouchesDirectlyOver 获取此元素上的所有触摸设备。(继承自 ContentElement)
TouchesOver 获取在此元素或其可视化树中的任何子元素上的所有触摸设备。(继承自 ContentElement)
Typography 获取该元素内容的当前有效的版式变体。(继承自 TextElement)

方法

方法 作用
Item( ) 通过指定索引获取或设置元素。对于List类来说,它是一个索引器。
Add( ) 在List中添加一个对象的公有方法
AddRange( ) 公有方法,在List尾部添加实现了ICollection接口的多个元素
BinarySearch( ) 重载的公有方法,用于在排序的List内使用二分查找来定位指定元素.
Clear( ) 在List内移除所有元素
Contains( ) 测试一个元素是否在List内
CopyTo( ) 重载的公有方法,把一个List拷贝到一维数组内
Exists( ) 测试一个元素是否在List内
Find( ) 查找并返回List内的出现的第一个匹配元素
FindAll( ) 查找并返回List内的所有匹配元素
GetEnumerator( ) 重载的公有方法,返回一个用于迭代List的枚举器
Getrange( ) 拷贝指定范围的元素到新的List内
IndexOf( ) 重载的公有方法,查找并返回每一个匹配元素的索引
Insert( ) 在List内插入一个元素
InsertRange( ) 在List内插入一组元素
LastIndexOf( ) 重载的公有方法,,查找并返回最后一个匹配元素的索引
Remove( ) 移除与指定元素匹配的第一个元素
RemoveAt( ) 移除指定索引的元素
RemoveRange( ) 移除指定范围的元素
Reverse( ) 反转List内元素的顺序
Sort( ) 对List内的元素进行排序
ToArray( ) 把List内的元素拷贝到一个新的数组内
trimToSize( ) 将容量设置为List中元素的实际数目

队列Queue

属性

属性 作用
Count 获取 Queue 中包含的元素数。
IsSynchronized 获取一个值,该值指示是否同步对 Queue 的访问(线程安全)。
SyncRoot 获取可用于同步对 Queue 的访问的对象。

方法

方法 作用
Count Count属性返回队列中的元素个数
Enqueue Enqueue()方法在队列一端添加一个元素
Dequeue Dequeue()方法在队列的头部读取和删除元素。如果在调用Dequeue()方法时,队列中不再有元素,就抛出一个InvalidOperationException类型的异常
Peek Peek()方法从队列的头部读取一个元素,但不删除它
TrimExcess TrimExcess()方法重新设置队列的容量。Dequeue()方法从队列中删除元素,但它不会重新设置队列的容量。要从队列的头部去除空元素,应使用TrimExcess()方法

栈Stack

属性

属性 作用
Count 获取 Stack 中包含的元素数。
IsSynchronized 获取一个值,该值指示是否同步对 Stack 的访问(线程安全)。
SyncRoot 获取可用于同步对 Stack 的访问的对象。

方法

方法 作用
Count 返回栈中的元素个数
Push 在栈顶添加一个元素
Pop 从栈顶删除一个元素,并返回该元素。如果栈是空的,就抛出InvalidOperationException异常
Peek 返回栈顶的元素,但不删除它
Contains 确定某个元素是否在栈中,如果是,就返回true

链表LinkedList

LinkedList是一个双向链表,其元素指向它前面和后面的元素.

属性

属性 作用
Count 获取 LinkedList 中实际包含的节点数。
First 获取 LinkedList 的第一个节点。
Last 获取 LinkedList 的最后一个节点。

方法

方法 作用
AddAfter(LinkedListNode, LinkedListNode) 在 LinkedList 中指定的现有节点后添加指定的新节点。
AddAfter(LinkedListNode, T) 在 LinkedList 中指定的现有节点后添加包含指定值的新节点。
AddBefore(LinkedListNode, LinkedListNode) 在 LinkedList 中指定的现有节点前添加指定的新节点。
AddBefore(LinkedListNode, T) 在 LinkedList 中指定的现有节点前添加包含指定值的新节点。
AddFirst(LinkedListNode) 在 LinkedList 的开头处添加指定的新节点。
AddFirst(T) 在 LinkedList 的开头处添加包含指定值的新节点。
AddLast(LinkedListNode) 在 LinkedList 的结尾处添加指定的新节点。
AddLast(T) 在 LinkedList 的结尾处添加包含指定值的新节点。
Clear() 从 LinkedList 中移除所有节点。
Contains(T) 确定某值是否在 LinkedList 中。
CopyTo(T[], Int32) 从目标数组的指定索引处开始将整个 LinkedList 复制到兼容的一维 Array。
Equals(Object) 确定指定的对象是否等于当前对象。(继承自 Object)
Find(T) 查找包含指定值的第一个节点。
FindLast(T) 查找包含指定值的最后一个节点。
GetEnumerator() 返回循环访问 LinkedList 的枚举数。
GetHashCode() 作为默认哈希函数。(继承自 Object)
GetObjectData(SerializationInfo, StreamingContext) 实现 ISerializable 接口,并返回序列化 LinkedList 实例所需的数据。
GetType() 获取当前实例的 Type。(继承自 Object)
MemberwiseClone() 创建当前 Object 的浅表副本。(继承自 Object)
OnDeserialization(Object) 实现 ISerializable 接口,并在完成反序列化之后引发反序列化事件。
Remove(LinkedListNode) 从 LinkedList 中移除指定的节点。
Remove(T) 从 LinkedList 中移除指定值的第一个匹配项。
RemoveFirst() 移除位于 LinkedList 开头处的节点。
RemoveLast() 移除位于 LinkedList 结尾处的节点。
ToString() 返回表示当前对象的字符串。(继承自 Object)

有序列表SortedList

SortedList 类代表了一系列按照键来排序的键/值对,这些键值对可以通过键和索引来访问。
排序列表是数组和哈希表的组合。它包含一个可使用键或索引访问各项的列表。如果您使用索引访问各项,则它是一个动态数组(ArrayList),如果您使用键访问各项,则它是一个哈希表(Hashtable)。集合中的各项总是按键值排序。

属性

属性 作用
Capacityz 获取或设置 SortedList 的容量。
Count 获取 SortedList 中的元素个数。
IsFixedSize 获取一个值,表示 SortedList 是否具有固定大小。
IsReadOnly 获取一个值,表示 SortedList 是否只读。
Item 获取或设置与 SortedList 中指定的键相关的值。
Keys 获取 SortedList 中的键。
Values 获取 SortedList 中的值。

方法

方法 作用
Add(Object, Object) 将带有指定键和值的元素添加到 SortedList 对象。
Clear() 从 SortedList 对象中移除所有元素。
Clone() 创建 SortedList 对象的浅表副本。
Contains(Object) 确定 SortedList 对象是否包含特定键。
ContainsKey(Object) 确定 SortedList 对象是否包含特定键。
ContainsValue(Object) 确定 SortedList 对象是否包含特定值。
CopyTo(Array, Int32) 从指定数组索引开始将 SortedList 元素复制到一维 Array 对象中。
Equals(Object) 确定指定的对象是否等于当前对象。(继承自 Object)
GetByIndex(Int32) 获取 SortedList 对象的指定索引处的值。
GetEnumerator() 返回一个循环访问 IDictionaryEnumerator 对象的 SortedList 对象。
GetHashCode() 作为默认哈希函数。(继承自 Object)
GetKey(Int32) 获取 SortedList 对象的指定索引处的键。
GetKeyList() 获取 SortedList 对象中的键。
GetType() 获取当前实例的 Type。(继承自 Object)
GetValueList() 获取 SortedList 对象中的值。
IndexOfKey(Object) 返回 SortedList 对象中指定键的从零开始的索引。
IndexOfValue(Object) 返回指定的值在 SortedList 对象中第一个匹配项的从零开始的索引。
MemberwiseClone() 创建当前 Object 的浅表副本。(继承自 Object)
Remove(Object) 从 SortedList 对象中移除带有指定键的元素。
RemoveAt(Int32) 移除 SortedList 对象的指定索引处的元素。
SetByIndex(Int32, Object) 替换 SortedList 对象中指定索引处的值。
Synchronized(SortedList) 返回 SortedList 对象的同步(线程安全)包装。
ToString() 返回表示当前对象的字符串。(继承自 Object)
TrimToSize() 将容量设置为 SortedList 对象中元素的实际数目。

字典Dictionary

字典表示一种非常复杂的数据结构,这种数据结构允许按照某个键来访问元素。字典也称为映射或散列表。字典的主要特性是能根据键快速查找值。也可以自由添加和删除元素,这有点像List类,但没有在内存中移动后续元素的性能开销。

属性

属性 作用
Comparer 获取用于确定字典中的键是否相等的 IEqualityComparer
Count 获取包含在 Dictionary<TKey,TValue> 中的键/值对的数目。
Item[TKey] 获取或设置与指定的键关联的值。
Keys 获得一个包含 Dictionary<TKey,TValue> 中的键的集合。
Values 获得一个包含 Dictionary<TKey,TValue> 中的值的集合。

方法

方法 作用
Add(TKey, TValue) 将指定的键和值添加到字典中。
Clear() 将所有键和值从 Dictionary<TKey,TValue> 中移除。
ContainsKey(TKey) 确定是否 Dictionary<TKey,TValue> 包含指定键。
ContainsValue(TValue) 确定 Dictionary<TKey,TValue> 是否包含特定值。
Equals(Object) 确定指定的对象是否等于当前对象。(继承自 Object)
GetEnumerator() 返回循环访问 Dictionary<TKey,TValue> 的枚举数。
GetHashCode() 作为默认哈希函数。(继承自 Object)
GetObjectData(SerializationInfo, StreamingContext) 实现 ISerializable 接口,并返回序列化 Dictionary<TKey,TValue> 实例所需的数据。
GetType() 获取当前实例的 Type。(继承自 Object)
MemberwiseClone() 创建当前 Object 的浅表副本。(继承自 Object)
OnDeserialization(Object) 实现 ISerializable 接口,并在完成反序列化之后引发反序列化事件。
Remove(TKey) 从 Dictionary<TKey,TValue> 中移除所指定的键的值。
ToString() 返回表示当前对象的字符串。(继承自 Object)
TryGetValue(TKey, TValue) 获取与指定键关联的值。

有序字典SortedDictionary

SortedDictionary<TKey, TValue>和SortedList<TKey, TValue>的功能类似。但因为SortedList<TKey, TValue>实现为一个基于数组的列表,而SortedDictionary<TKey, TValue>类实现为一个字典,所以它们有不同的特征。
● SortedList<TKey, TValue>使用的内存比SortedDictionary<TKey, TValue>少。
● SortedDictionary<TKey, TValue>的元素插入和删除操作比较快。
● 在用已排好序的数据填充集合时,若不需要修改容量,SortedList<TKey, TValue>就比较快。

集Set

包含不重复元素的集合称为“集(set)”。.NET Framework包含两个集(HashSet和SortedSet),它们都实现ISet接口。HashSet集包含不重复元素的无序列表,SortedSet集包含不重复元素的有序列表。

HashSet属性

属性 作用
Comparer 获取用于确定集中的值是否相等的 IEqualityComparer 对象。
Count 获取集中包含的元素数。

HashSet属性

方法 作用
Add(T) 将指定的元素添加到集中。
Clear() 从 HashSet 对象中移除所有元素。
Contains(T) 确定 HashSet 对象是否包含指定的元素。
CopyTo(T[]) 将 HashSet 对象的元素复制到数组中。
CopyTo(T[], Int32) 从指定数组索引处开始,将 HashSet 对象的元素复制到数组中。
CopyTo(T[], Int32, Int32) 从指定数组索引处开始,将 HashSet 对象的指定数目的元素复制到数组中。
CreateSetComparer() 返回 IEqualityComparer 对象,该对象可用于对 HashSet 对象进行相等测试。
Equals(Object) 确定指定的对象是否等于当前对象。(继承自 Object)
ExceptWith(IEnumerable) 从当前 HashSet 对象中移除指定集合中的所有元素。
GetEnumerator() 返回循环访问 HashSet 对象的枚举器。
GetHashCode() 作为默认哈希函数。(继承自 Object)
GetObjectData(SerializationInfo, StreamingContext) 实现 ISerializable 接口并返回序列化 HashSet 对象所需的数据。
GetType() 获取当前实例的 Type。(继承自 Object)
IntersectWith(IEnumerable) 修改当前的 HashSet 对象,以仅包含该对象和指定集合中存在的元素。
IsProperSubsetOf(IEnumerable) 确定 HashSet 对象是否为指定集合的真子集。
IsProperSupersetOf(IEnumerable) 确定 HashSet 对象是否为指定集合的真超集。
IsSubsetOf(IEnumerable) 确定 HashSet 对象是否为指定集合的子集。
IsSupersetOf(IEnumerable) 确定 HashSet 对象是否为指定集合的超集。
MemberwiseClone() 创建当前 Object 的浅表副本。(继承自 Object)
OnDeserialization(Object) 实现 ISerializable 接口,并在完成反序列化之后引发反序列化事件。
Overlaps(IEnumerable) 确定是否当前的 HashSet 对象和指定的集合共享通用元素。
Remove(T) 从 HashSet 对象移除指定元素。
RemoveWhere(Predicate) 从 HashSet 集合中移除与指定的谓词所定义的条件相匹配的所有元素。
SetEquals(IEnumerable) 确定是否 HashSet 对象和指定集合包含相同的元素。
SymmetricExceptWith(IEnumerable) 修改当前 HashSet 对象以仅包含存在于该对象中或存在于指定集合中的元素(但并非两者)。
ToString() 返回表示当前对象的字符串。(继承自 Object)
TrimExcess() 将 HashSet 对象的容量设置为它包含的实际元素数,向上舍入为接近的特定于实现的值。
TryGetValue(T, T) 在集内搜索给定的值,并返回所找到的相等值(如果有)。
UnionWith(IEnumerable) 修改当前 HashSet 对象以包含存在于该对象中、指定集合中或两者中的所有元素。

性能

许多集合类都提供了相同的功能,例如,SortedList类与SortedDictionary类的功能几乎完全相同。但是,其性能常常有很大区别。一个集合使用的内存少,另一个集合的元素检索速度快。在MSDN文档中,集合的方法常常有性能提示,给出了以大写O记号表示的操作时间:
O(1),O(log n), O(n)

O(1)表示无论集合中有多少数据项,这个操作需要的时间都不变。例如,ArrayList类的Add()方法就具有O(1)行为。无论列表中有多少个元素,在列表末尾添加一个新元素的时间都相同。Count属性会给出元素个数,所以很容易找到列表末尾。

O(n)表示对于集合执行一个操作需要的时间在最坏情况时是N。如果需要重新给集合分配内存,ArrayList类的Add()方法就是一个O(n)操作。改变容量,需要复制列表,复制的时间随元素的增加而线性增加。

O(log n)表示操作需要的时间随集合中元素的增加而增加,但每个元素需要增加的时间不是线性的,而是呈对数曲线。在集合中执行插入操作时,SortedDictionary<TKey, TValue>集合类具有O(log n)行为,而SortedList<TKey, TValue>集合类具有O(n)行为。这里SortedDictionary <TKey, TValue>集合类要快得多,因为它在树型结构中插入元素的效率比列表高得多。

并发集合

不变的集合很容易在多个线程中使用,因为它们不能改变。如果希望使用应在多个线程中改变的集合,.NET在名称空间System.Collections.Concurrent中提供了几个线程安全的集合类。线程安全的集合可防止多个线程以相互冲突的方式访问集合。

为了对集合进行线程安全的访问,定义了IProducerConsumerCollection接口。这个接口中最重要的方法是TryAdd()和TryTake()。TryAdd()方法尝试给集合添加一项,但如果集合禁止添加项,这个操作就可能失败。为了给出相关信息,TryAdd()方法返回一个布尔值,以说明操作是成功还是失败。TryTake()方法也以这种方式工作,以通知调用者操作是成功还是失败,并在操作成功时返回集合中的项。下面列出了System.Collections.Concurrent名称空间中的类及其功能。

● ConcurrentQueue ——这个集合类用一种免锁定的算法实现,使用在内部合并到一个链表中的32项数组。访问队列元素的方法有Enqueue()、TryDequeue()和TryPeek()。这些方法的命名非常类似于前面Queue类的方法,只是给可能调用失败的方法加上了前缀Try。因为这个类实现了IProducerConsumerCollection接口,所以TryAdd()和TryTake()方法仅调用Enqueue()和TryDequeue()方法。

● ConcurrentStack ——非常类似于ConcurrentQueue类,只是带有另外的元素访问方法。ConcurrentStack类定义了Push()、PushRange()、TryPeek()、TryPop()以及TryPopRange()方法。在内部这个类使用其元素的链表。

● ConcurrentBag ——该类没有定义添加或提取项的任何顺序。这个类使用一个把线程映射到内部使用的数组上的概念,因此尝试减少锁定。访问元素的方法有Add()、TryPeek()和TryTake()。

● ConcurrentDictionary<TKey, TValue> ——这是一个线程安全的键值集合。TryAdd()、TryGetValue()、TryRemove()和TryUpdate()方法以非阻塞的方式访问成员。因为元素基于键和值,所以ConcurrentDictionary<TKey, TValue>没有实现IProducerConsumerCollection

● BlockingCollection ——这个集合在可以添加或提取元素之前,会阻塞线程并一直等待。BlockingCollection集合提供了一个接口,以使用Add()和Take()方法来添加和删除元素。这些方法会阻塞线程,一直等到任务可以执行为止。Add()方法有一个重载版本,其中可以给该重载版本传递一个CancellationToken令牌。这个令牌允许取消被阻塞的调用。如果不希望线程无限期地等待下去,且不希望从外部取消调用,就可以使用TryAdd()和TryTake()方法,在这些方法中,也可以指定一个超时值,它表示在调用失败之前应阻塞线程和等待的最长时间。

ConcurrentXXX集合是线程安全的,如果某个动作不适用于线程的当前状态,它们就返回false。在继续之前,总是需要确认添加或提取元素是否成功。不能相信集合会完成任务。

BlockingCollection是对实现了IProducerConsumerCollection接口的任意类的修饰器,它默认使用ConcurrentQueue类。还可以给构造函数传递任何其他实现了IProducerConsumer-Collection接口的类,例如,ConcurrentBag和ConcurrentStack


文章作者: 陈德强
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 陈德强 !
¥
  目录