BitArray 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
管理一个压缩的位值数组,这些值表示为布尔值,其中 true 指示位位于 (1) 上,并 false 指示位已关闭 (0)。
public ref class BitArray sealed : System::Collections::ICollection
public ref class BitArray sealed : ICloneable, System::Collections::ICollection
public sealed class BitArray : System.Collections.ICollection
public sealed class BitArray : ICloneable, System.Collections.ICollection
[System.Serializable]
public sealed class BitArray : ICloneable, System.Collections.ICollection
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class BitArray : ICloneable, System.Collections.ICollection
type BitArray = class
interface ICollection
interface IEnumerable
type BitArray = class
interface ICollection
interface IEnumerable
interface ICloneable
[<System.Serializable>]
type BitArray = class
interface ICollection
interface IEnumerable
interface ICloneable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type BitArray = class
interface ICollection
interface IEnumerable
interface ICloneable
Public NotInheritable Class BitArray
Implements ICollection
Public NotInheritable Class BitArray
Implements ICloneable, ICollection
- 继承
-
BitArray
- 属性
- 实现
示例
下面的代码示例演示如何创建和初始化其 BitArray 值以及如何输出其值。
using System;
using System.Collections;
public class SamplesBitArray {
public static void Main() {
// Creates and initializes several BitArrays.
BitArray myBA1 = new BitArray( 5 );
BitArray myBA2 = new BitArray( 5, false );
byte[] myBytes = new byte[5] { 1, 2, 3, 4, 5 };
BitArray myBA3 = new BitArray( myBytes );
bool[] myBools = new bool[5] { true, false, true, true, false };
BitArray myBA4 = new BitArray( myBools );
int[] myInts = new int[5] { 6, 7, 8, 9, 10 };
BitArray myBA5 = new BitArray( myInts );
// Displays the properties and values of the BitArrays.
Console.WriteLine( "myBA1" );
Console.WriteLine( " Count: {0}", myBA1.Count );
Console.WriteLine( " Length: {0}", myBA1.Length );
Console.WriteLine( " Values:" );
PrintValues( myBA1, 8 );
Console.WriteLine( "myBA2" );
Console.WriteLine( " Count: {0}", myBA2.Count );
Console.WriteLine( " Length: {0}", myBA2.Length );
Console.WriteLine( " Values:" );
PrintValues( myBA2, 8 );
Console.WriteLine( "myBA3" );
Console.WriteLine( " Count: {0}", myBA3.Count );
Console.WriteLine( " Length: {0}", myBA3.Length );
Console.WriteLine( " Values:" );
PrintValues( myBA3, 8 );
Console.WriteLine( "myBA4" );
Console.WriteLine( " Count: {0}", myBA4.Count );
Console.WriteLine( " Length: {0}", myBA4.Length );
Console.WriteLine( " Values:" );
PrintValues( myBA4, 8 );
Console.WriteLine( "myBA5" );
Console.WriteLine( " Count: {0}", myBA5.Count );
Console.WriteLine( " Length: {0}", myBA5.Length );
Console.WriteLine( " Values:" );
PrintValues( myBA5, 8 );
}
public static void PrintValues( IEnumerable myList, int myWidth ) {
int i = myWidth;
foreach ( Object obj in myList ) {
if ( i <= 0 ) {
i = myWidth;
Console.WriteLine();
}
i--;
Console.Write( "{0,8}", obj );
}
Console.WriteLine();
}
}
/*
This code produces the following output.
myBA1
Count: 5
Length: 5
Values:
False False False False False
myBA2
Count: 5
Length: 5
Values:
False False False False False
myBA3
Count: 40
Length: 40
Values:
True False False False False False False False
False True False False False False False False
True True False False False False False False
False False True False False False False False
True False True False False False False False
myBA4
Count: 5
Length: 5
Values:
True False True True False
myBA5
Count: 160
Length: 160
Values:
False True True False False False False False
False False False False False False False False
False False False False False False False False
False False False False False False False False
True True True False False False False False
False False False False False False False False
False False False False False False False False
False False False False False False False False
False False False True False False False False
False False False False False False False False
False False False False False False False False
False False False False False False False False
True False False True False False False False
False False False False False False False False
False False False False False False False False
False False False False False False False False
False True False True False False False False
False False False False False False False False
False False False False False False False False
False False False False False False False False
*/
Imports System.Collections
Public Class SamplesBitArray
Public Shared Sub Main()
' Creates and initializes several BitArrays.
Dim myBA1 As New BitArray(5)
Dim myBA2 As New BitArray(5, False)
Dim myBytes() As Byte = {1, 2, 3, 4, 5}
Dim myBA3 As New BitArray(myBytes)
Dim myBools() As Boolean = {True, False, True, True, False}
Dim myBA4 As New BitArray(myBools)
Dim myInts() As Integer = {6, 7, 8, 9, 10}
Dim myBA5 As New BitArray(myInts)
' Displays the properties and values of the BitArrays.
Console.WriteLine("myBA1")
Console.WriteLine(" Count: {0}", myBA1.Count)
Console.WriteLine(" Length: {0}", myBA1.Length)
Console.WriteLine(" Values:")
PrintValues(myBA1, 8)
Console.WriteLine("myBA2")
Console.WriteLine(" Count: {0}", myBA2.Count)
Console.WriteLine(" Length: {0}", myBA2.Length)
Console.WriteLine(" Values:")
PrintValues(myBA2, 8)
Console.WriteLine("myBA3")
Console.WriteLine(" Count: {0}", myBA3.Count)
Console.WriteLine(" Length: {0}", myBA3.Length)
Console.WriteLine(" Values:")
PrintValues(myBA3, 8)
Console.WriteLine("myBA4")
Console.WriteLine(" Count: {0}", myBA4.Count)
Console.WriteLine(" Length: {0}", myBA4.Length)
Console.WriteLine(" Values:")
PrintValues(myBA4, 8)
Console.WriteLine("myBA5")
Console.WriteLine(" Count: {0}", myBA5.Count)
Console.WriteLine(" Length: {0}", myBA5.Length)
Console.WriteLine(" Values:")
PrintValues(myBA5, 8)
End Sub
Public Shared Sub PrintValues(myList As IEnumerable, myWidth As Integer)
Dim i As Integer = myWidth
Dim obj As [Object]
For Each obj In myList
If i <= 0 Then
i = myWidth
Console.WriteLine()
End If
i -= 1
Console.Write("{0,8}", obj)
Next obj
Console.WriteLine()
End Sub
End Class
' This code produces the following output.
'
' myBA1
' Count: 5
' Length: 5
' Values:
' False False False False False
' myBA2
' Count: 5
' Length: 5
' Values:
' False False False False False
' myBA3
' Count: 40
' Length: 40
' Values:
' True False False False False False False False
' False True False False False False False False
' True True False False False False False False
' False False True False False False False False
' True False True False False False False False
' myBA4
' Count: 5
' Length: 5
' Values:
' True False True True False
' myBA5
' Count: 160
' Length: 160
' Values:
' False True True False False False False False
' False False False False False False False False
' False False False False False False False False
' False False False False False False False False
' True True True False False False False False
' False False False False False False False False
' False False False False False False False False
' False False False False False False False False
' False False False True False False False False
' False False False False False False False False
' False False False False False False False False
' False False False False False False False False
' True False False True False False False False
' False False False False False False False False
' False False False False False False False False
' False False False False False False False False
' False True False True False False False False
' False False False False False False False False
' False False False False False False False False
' False False False False False False False False
注解
该 BitArray 类是一个集合类,其容量始终与计数相同。 通过增加Length属性添加到元素BitArray;通过减少Length属性来删除元素。 客户端控制 a BitArray 的大小;索引超过引发的末尾 BitArray 。ArgumentException 该BitArray类提供在其他集合中未找到的方法,包括那些允许使用筛选器(例如And、Or、 Xor 和NotSetAll)一次性修改多个元素的方法。
该 BitVector32 类是一种结构,提供的功能与性能 BitArray更快,但功能相同。 BitVector32 速度更快,因为它是一种值类型,因此在堆栈上分配,而 BitArray 它是引用类型,因此是在堆上分配的。
System.Collections.Specialized.BitVector32 可以完全存储 32 位,而 BitArray 可以存储可变数量的位。 BitVector32 存储位标志和小整数,从而使它非常适合不向用户公开的数据。 但是,如果所需的位标志数未知、可变或大于 32,请改用 BitArray 。
BitArray 位于命名空间中 System.Collections ; BitVector32 位于命名空间中 System.Collections.Specialized 。
可以使用整数索引访问此集合中的元素。 此集合中的索引从零开始。
构造函数
| 名称 | 说明 |
|---|---|
| BitArray(BitArray) | |
| BitArray(Boolean[]) |
初始化类的新实例,该实例 BitArray 包含从指定的布尔值数组复制的位值。 |
| BitArray(Byte[]) |
初始化类的新实例,该实例 BitArray 包含从指定的字节数组复制的位值。 |
| BitArray(Int32, Boolean) |
初始化类的新实例,该实例 BitArray 可以保存指定数量的位值,这些值最初设置为指定值。 |
| BitArray(Int32) |
初始化类的新实例,该实例 BitArray 可以保存最初设置为 |
| BitArray(Int32[]) |
初始化类的新实例,该实例 BitArray 包含从 32 位整数的指定数组复制的位值。 |
属性
| 名称 | 说明 |
|---|---|
| Count |
获取包含在 . 中的 BitArray元素数。 |
| IsReadOnly |
获取一个值,该值指示是否 BitArray 为只读。 |
| IsSynchronized |
获取一个值,该值指示对 BitArray 同步的访问是否同步(线程安全)。 |
| Item[Int32] |
获取或设置位于特定位置的 BitArray位的值。 |
| Length |
获取或设置 . 中的 BitArray元素数。 |
| SyncRoot |
获取可用于同步对 . BitArray的访问的对象。 |
方法
| 名称 | 说明 |
|---|---|
| And(BitArray) |
在当前 BitArray 对象的元素与指定数组中的相应元素之间执行按位 AND 运算。 将修改当前 BitArray 对象以存储按位 AND 操作的结果。 |
| Clone() |
创建浅 BitArray表副本。 |
| CopyTo(Array, Int32) | |
| Equals(Object) |
确定指定的对象是否等于当前对象。 (继承自 Object) |
| Get(Int32) |
获取位于特定位置的 BitArray位的值。 |
| GetEnumerator() |
返回循环访问的 BitArray枚举数。 |
| GetHashCode() |
用作默认哈希函数。 (继承自 Object) |
| GetType() |
获取当前实例的 Type。 (继承自 Object) |
| HasAllSet() |
确定是否将其中 BitArray 的所有位都设置为 |
| HasAnySet() |
确定中 BitArray 是否有任何位设置为 |
| LeftShift(Int32) |
将当前 BitArray 的所有位值移到位上的 |
| MemberwiseClone() |
创建当前 Object的浅表副本。 (继承自 Object) |
| Not() |
反转当前 BitArray中的所有位值,以便将设置为的元素 |
| Or(BitArray) |
在当前 BitArray 对象的元素与指定数组中的相应元素之间执行按位 OR 运算。 将修改当前 BitArray 对象以存储按位 OR 操作的结果。 |
| PopCount() |
管理一个压缩的位值数组,这些值表示为布尔值,其中 |
| RightShift(Int32) |
将当前 BitArray 位的所有位值移到位的 |
| Set(Int32, Boolean) |
将位设置为指定值的特定 BitArray 位置。 |
| SetAll(Boolean) |
将指定值中的所有 BitArray 位都设置为。 |
| ToString() |
返回一个表示当前对象的字符串。 (继承自 Object) |
| Xor(BitArray) |
对指定数组中的相应元素执行当前 BitArray 对象的元素之间的按位排他或运算。 将修改当前 BitArray 对象以存储按位排他 OR 操作的结果。 |
显式接口实现
| 名称 | 说明 |
|---|---|
| ICollection.CopyTo(Array, Int32) | |
| ICollection.Count |
获取 . 中的 BitArray元素数。 |
| ICollection.IsSynchronized |
获取一个值,该值指示是否同步对 BitArray 的访问(线程安全)。 |
| ICollection.SyncRoot |
获取可用于同步对 . BitArray的访问的对象。 |
扩展方法
| 名称 | 说明 |
|---|---|
| AsParallel(IEnumerable) |
启用查询的并行化。 |
| AsQueryable(IEnumerable) |
将 IEnumerable 转换为 IQueryable。 |
| Cast<TResult>(IEnumerable) |
将 IEnumerable 的元素强制转换为指定类型。 |
| OfType<TResult>(IEnumerable) |
根据指定类型筛选 IEnumerable 的元素。 |
适用于
线程安全性
此类型的公共静态(Shared 在 Visual Basic 中)成员是线程安全的。 不能保证任何实例成员是线程安全的。
此实现不提供同步的(线程安全)包装器 BitArray。
通过集合进行枚举本质上不是线程安全的过程。 即使集合同步,其他线程仍可以修改集合,这会导致枚举器引发异常。 若要保证枚举期间的线程安全性,可以在整个枚举期间锁定集合,也可以捕获由其他线程所做的更改导致的异常。