Array类
- 用括号声明数组是C#中使用Array类的记号。在后台使用C#语法,会创建一个派生于抽象基类Array的新类。这样,就可以使用Array类为每个C#数组定义的方法和属性了。
- Array类实现了IEumerable、ICollection和IList接口,以访问和枚举数组中的元素。由于用定制数组创建的类派生于Array抽象类,所以能使用通过数组变量执行的接口中的方法和属性。
a) IEumerable接口是由foreach语句用于迭代数组的接口。
b) ICollection接口派生于IEumerable接口,这个接口主要用于确定集合中的元素个数,或用于同步。
c) IList接口派生于ICollection接口,Array类实现IList接口的主要原因是IList接口定义了Item属性,以使用索引器访问元素。 1. Array类包含的如下属性和方法可以用于每个数组实例。
属性及方法 |
说明 |
Length |
Length属性返回数组中的元素个数。如果是一个多维数组,该属性会返回所有阶的元素个数。如果需要确定一维中的元素个数,则可以使用GetLength()方法 |
LongLength |
Length属性返回int值,而LongLength属性返回long值。如果数组包含的元素个数超出了32位int值的取值范围,就需要使用LongLength属性,来获得元素个数 |
Rank |
使用Rank属性可以获得数组的维数 |
CreateInstance() |
如果事先不知道元素的类型,就可以使用该静态方法,因为类型可以作为Type对象传送给CreateInstance()方法。 |
SetValue() |
SetValue()方法设置数组的元素,其参数是每一维的索引 |
Clone() |
因为数组是引用类型,所以将一个数组变量赋予另一个数组变量,就会得到两个指向同一数组的变量。而复制数组,会使数组实现ICloneable接口。这个接口定义的Clone()方法会创建数组的浅副本。 |
Sort() |
Array类实现了对数组中元素的冒泡排序。Sort()方法需要数组中的元素实现IComparable接口。简单类型,如System.String和System.Int32实现了IComparable接口,所以可以对包含这些类型的元素排序。 |
Count |
Count属性可确定集合中的元素个数,它返回的值与Length属性相同 |
IsSynchronized SyncRoot |
IsSynchronized属性确定集合是否是线程安全的。对于数组,这个属性总是返回false。对于同步访问,SyncRoot属性可以用于线程安全的访问。 |
CopyTo() |
利用CopyTo()方法可以将数组的元素复制到现有的数组中。它类似于静态方法Array.Copy() |
Add() |
Add()方法用于在集合中添加元素。对于数组,该方法会抛出NotSupportedException异常 |
Clear() |
Clear()方法可清除数组中的所有元素。值类型设置为0,引用类型设置为null |
Contains() |
Contains()方法可以确定某个元素是否在数组中。其返回值是true或false。这个方法会对数组中的所有元素进行线性搜索,直到找到所需元素为止 |
IndexOf() |
IndexOf()方法与Contains()方法类似,也是对数组中的所有元素进行线性搜索。不同的是,IndexOf()方法会返回所找到的第一个元素的索引 |
Insert() |
对于集合,Insert()方法用于插入元素,对于数组,这方法抛出NotSupportedException异常 |
Remove () RemoveAt() |
对于集合, Remove()和RemoveAt()可删除元素。对于数组,这些方法抛出NotSupportedException异常 |
IsFixedSize |
数组的大小总是固定的,所以这个属性总是返回true |
IsReadOnly |
数组总是可以读/写的,所以这个属性返回false。 |
Item |
Item属性可以用整型索引访问数组 |
MoveNext() |
MoveNext()方法移动到集合的下一个元素上,如果有这个元素,该方法就返回true。如果集合不再有更多的元素,该方法就返回false |
Current |
属性Current返回光标所在的元素 |
Reset() |
Reset()方法将光标重新定位于集合的开头。许多枚举会抛出NotSupportedException异常 |
GetEumerator() |
数组或集合执行带GetEumerator()方法的IEumerable接口。GetEumerator()方法返回一个执行IEumerable接口的枚举。接着,foreach语句就可以使用IEumerable接口迭代集合了。 |
System.Text.String类
- System.String是一个类,专门用于存储字符串,允许对字符串进行许多操作。由于这种数据类型非常重要,C#提供了它自己的关键字和相关的语法,以便于使用这个类来处理字符串。
- 使用“+”运算符重载可以连接字符串。
- C#还允许使用类似于索引器的语法来提取指定的字符。
- 这个类可以完成许多常见的任务,例如替换字符、删除空白和把字母变成大写形式等。可用的方法如下:
方法 |
作用 |
Compare() |
比较字符串的内容,考虑文化背景(区域),确定某些字符是否相等 |
CompareOrdinal () |
与Compare一样,但不考虑文化背景 |
Concat () |
把多个字符串实例合并为一个实例 |
CopyTo () |
把特定数量的字符从选定的下标复制到数组的一个全新实例中 |
Format () |
格式化包含各种值的字符串和如何格式化每个值的说明符 |
IndexOf () |
定位字符串中第一次出现某个给定子字符串或字符的位置 |
IndexOfAny () |
定位字符串中第一次出现某个字符或一组字符的位置 |
Insert () |
把一个字符串实例插入到另一个字符串实例的指定索引处 |
Join () |
合并字符串数组,建立一个新字符串 |
LastIndexOf () |
与IndexOf一样,但定位最后一次出现的位置 |
LastIndexOfAny () |
与IndexOfAny,但定位最后一次出现的位置 |
PadLeft () |
在字符串的开头,通过添加指定的重复字符填充字符串 |
PadRight () |
在字符串的结尾,通过添加指定的重复字符填充字符串 |
Replace () |
用另一个字符或子字符串替换字符串中给定的字符或子字符串 |
Split () |
在出现给定字符的地方,把字符串拆分为一个子字符串数组 |
Substring () |
在字符串中获取给定位置的子字符串 |
ToLower () |
把字符串转换为小写形式 |
ToUpper () |
把字符串转换为大写形式 |
Trim () |
删除首尾的空白 |
System.Text.StringBuilder类
- String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。
- 在使用String类构造一个字符串时,要给它分配足够的内存来保存字符串,但StringBuilder通常分配的内存会比需要的更多。开发人员可以选择显式指定StringBuilder要分配多少内存,但如果没有显式指定,存储单元量在默认情况下就根据StringBuilder初始化时的字符串长度来确定。
它有两个主要的属性:
- Length指定字符串的实际长度.
- Capacity是字符串占据存储单元的最大长度。
- 主要的StringBuilder方法:
名称 |
作用 |
Append() |
给当前字符串添加一个字符串 |
AppendFormat() |
添加特定格式的字符串 |
Insert() |
在当前字符串中插入一个子字符串 |
Remove() |
从当前字符串中删除字符 |
Replace() |
在当前字符串中,用某个字符替换另一个字符,或者用当前字符串中的一个子字符串替换另一字符串。 |
ToString() |
把当前字符串转换为System.String对象(在System.Object中被重写) |
- 集合是一组组合在一起的类似的类型化对象。任何类型的对象都可被组合到 Object 类型的单个集合中,以利用采用该语言继承的构造。
- System.Collections 命名空间包含接口和类,这些接口和类定义各种对象的集合。
- 集合类型是数据集合的常见变体,例如哈希表、队列、堆栈、字典和列表。
- System.Collections 命名空间主要成员:
类 |
说明 |
ArrayList |
使用大小可按需动态增加的数组实现 IList 接口。 |
BitArray |
管理位值的压缩数组,该值表示为布尔值,其中 true 表示位是打开的 (1),false 表示位是关闭的 (0)。 |
Hashtable |
表示键/值对的集合,这些键/值对根据键的哈希代码进行组织。 |
Queue |
表示对象的先进先出集合。 |
SortedList |
表示键/值对的集合,这些键值对按键排序并可按照键和索引访问。 |
Stack |
表示对象的简单的后进先出非泛型集合。 |
接口 |
说明 |
ICollection |
定义所有非泛型集合的大小、枚举数和同步方法。 |
IComparer |
公开一种比较两个对象的方法。 |
IDictionary |
表示键/值对的非通用集合。 |
IDictionaryEnumerator |
枚举非泛型字典的元素。 |
IEnumerable |
公开枚举数,该枚举数支持在非泛型集合上进行简单迭代。 |
IEnumerator |
支持对非泛型集合的简单迭代。 |
IEqualityComparer |
定义方法以支持对象的相等比较。 |
IHashCodeProvider |
使用自定义哈希函数为对象提供哈希代码。 |
IList |
表示可按照索引单独访问的对象的非泛型集合。 |
System.Collections.Generic命名空间
- System.Collections.Generic和System.Collections集合的结构有很多相似之处,不同的是“Generic”提供的都是泛型集合,而“Collections”中的集合并不都支持泛型。
- 泛型的意义在于,通过参数化类型来实现在同一份代码上对多种数据类型的操作。这种解释比较抽象,简单来讲,泛型就是利用参数化类型将类型抽象化,通常称为“类型多态”。
- 泛型使用“<>”将类型参数化,其中被尖括号包装的类型,必须是从System.Object继承的共有成员。
- 泛型的优点如下:
- 更强的类型安全。
- 更好的复用,因为类型其实是一个参数。
- 更高的效率。
- 更清晰的约束。
System.Collections.Generic空间中的成员基本上和System.Collections类似,只不过是泛型的版本。
System. Text.RegularExpressions命名空间
- 正则表达式在各种程序中都有着难以置信的作用。正则表达式可以看做一种有特定功能的小型编程语言:在大的字符串表达式中定位一个子字符串。
- System.Text.RegularExpressions 命名空间包含一些类,这些类提供对 .NET Framework 正则表达式引擎的访问。 该命名空间提供正则表达式功能,可以从运行在 Microsoft .NET Framework 内的任何平台或语言中使用该功能。
- System.Text.RegularExpressions 命名空间主要成员:
类 |
说明 |
Capture |
表示来自单个成功的子表达式捕获的结果。 |
CaptureCollection |
表示一个捕获组做出的捕获的集合。 |
Group |
表示来自单个捕获组的结果。 |
GroupCollection |
返回一次匹配中捕获的组的集合。 |
Match |
表示单个正则表达式匹配的结果。 |
MatchCollection |
表示通过以迭代方式将正则表达式模式应用于输入字符串所找到的成功匹配的集合。 |
Regex |
表示不可变的正则表达式。 |
应用实例:
Regex rx = new Regex(@"\b(?<word>\w+)\s+(\k<word>)\b", RegexOptions.Compiled | RegexOptions.IgnoreCase);
// Define a regular expression for repeated words. string text = "The the quick brown fox fox jumped over the lazy dog dog.";
// Define a test string. MatchCollection matches = rx.Matches(text);
// Find matches. Console.WriteLine("{0} matches found in:\n {1}", matches.Count, text);
// Report the number of matches found.
foreach (Match match in matche s)
{
GroupCollection groups = match.Groups;
Console.WriteLine("'{0}' repeated at positions {1} and {2}", groups"word".Value, groups .Index, groups1.Index);
}
// Report on each match.
// The example produces the following output to the console:
// 3 matches found in:
// The the quick brown fox fox jumped over the lazy dog dog.
// 'The' repeated at positions 0 and 4
// 'fox' repeated at positions 20 and 25
// 'dog' repeated at positions 50 and 54
System.Data.SqlClient 命名空间
- System.Data.SqlClient 命名空间这个类集合用于访问托管空间中的 SQL Server 数据库。
- 使用 SqlDataAdapter,可以填充驻留在内存中的 DataSet,该数据集可用于查询和更新数据源。
- System.Data.SqlClient 命名空间主要成员:
类 |
说明 |
SqlBulkCopy |
使您可以用其他源的数据有效批量加载 SQL Server 表。 |
SqlCommand |
表示要对 SQL Server 数据库执行的一个 Transact-SQL 语句或存储过程。 |
SqlCommandBuilder |
用于将对 DataSet 所做的更改与关联的 SQL Server 数据库的更改相协调。 |
SqlConnection |
表示 SQL Server 数据库的一个打开的连接。无法继承此类。 |
SqlConnectionStringBuilder |
为创建和管理由 SqlConnection 类使用的连接字符串的内容提供了一种简单方法。 |
SqlDataAdapter |
表示用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连接。 |
SqlDataReader |
提供一种从 SQL Server 数据库读取行的只进流的方式。 |
SqlError |
收集与 SQL Server 返回的警告或错误有关的信息。 |
SqlErrorCollection |
收集 SQL Server .NET Framework 数据提供程序生成的所有错误。 |
SqlException |
当 SQL Server 返回警告或错误时引发的异常。无法继承此类。 |
SqlParameter |
表示 SqlCommand的参数,也可以是它到 DataSet 列的映射。 |
SqlTransaction |
表示要在 SQL Server 数据库中处理的 Transact-SQL 事务。 |
System.Data命名空间
- System.Data 命名空间提供对表示 ADO.NET 结构的类访问。通过 ADO.NET 可以生成一些组件,用于有效管理多个数据源的数据。
- ADO.NET 结构的中心构件是 DataSet类。每个 DataSet 都可以包含多个 DataTable对象,每个 DataTable 都包含来自单个数据源(如 SQL Server)的数据。
- 每个 DataTable 都包含一个 DataColumnCollection(DataColumn对象的集合),DataColumnCollection 决定每个 DataTable 的架构。DataType 属性确定 DataColumn 所包含的数据的类型。使用 ReadOnly 和 AllowDBNull 属性可以进一步确保数据完整性。使用 Expression属性可以构造计算出的列。
- 如果 DataTable 参与同另一个 DataTable 的父/子关系,则通过将DataRelation 添加到 DataSet 对象的 DataRelationCollection来构造该关系。
- 使用 System.Data.SqlClient 命名空间(用于 SQL Server 的 .NET Framework 数据提供程序)、System.Data.Odbc命名空间(用于 ODBC 的 .NET Framework 数据提供程序)、System.Data.OleDb 命名空间(用于 OLE DB 的 .NET Framework 数据提供程序)或 System.Data.OracleClient 命名空间(用于 Oracle 的 .NET Framework 数据提供程序),可访问要与 DataSet 结合使用的数据源。每个 .NET Framework 数据提供程序都有相应的 DataAdapter,可以将它用作数据源和 DataSet 之间的桥梁。
- System.Data命名空间主要成员:
类 |
说明 |
Constraint |
表示可在一个或多个 DataColumn 对象上强制的约束。 |
ConstraintCollection |
表示 DataTable 的约束的集合。 |
DataColumn |
表示 DataTable 中列的架构。 |
DataColumnCollection |
表示 DataTable 的 DataColumn 对象的集合。 |
DataException |
表示使用 ADO.NET 组件发生错误时引发的异常。 |
DataRelation |
表示两个 DataTable 对象之间的父/子关系。 |
DataRelationCollection |
表示此 DataSet 的 DataRelation 对象的集合。 |
DataRow |
表示 DataTable 中的一行数据。 |
DataRowCollection |
表示 DataTable 的行的集合。 |
DataRowView |
表示 DataRow 的自定义视图。 |
DataSet |
表示数据在内存中的缓存。 |
DataTable |
表示内存中数据的一个表。 |
DataTableCollection |
表示 DataSet 的表的集合。 |
DataTableReader |
DataTableReader 以一个或多个只读、只进结果集的形式获取一个或多个 DataTable 对象的内容。 |
DataView |
表示用于排序、筛选、搜索、编辑和导航的 DataTable 的可绑定数据的自定义视图。 |
完整实例:
string sqlConnectionCommand = "Data Source=aa;Initial Catalog=bb;User ID=cc;Pwd=dd";
string dataTableName = "Basic\_Keyword\_Test";
string sqlSelectCommand = "Select KeywordID, KeywordName From Basic\_Keyword\_Test";
SqlConnection sqlConnection = new SqlConnection(sqlConnectionCommand);
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.CommandType = System.Data.CommandType.Text;
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText = sqlSelectCommand;
sqlConnection.Open();
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
sqlDataAdapter.SelectCommand = sqlCommand;
DataSet dataSet = new DataSet();
SqlCommandBuilder sqlCommandBuilder = new SqlCommandBuilder(sqlDataAdapter);
sqlDataAdapter.Fill(dataSet, dataTableName);
DataRow row = dataSet.Tables .NewRow();
row = 10000;
row1 = "new row";
dataSet.Tables .Rows.Add(row);
sqlDataAdapter.Update(dataSet, dataTableName);
sqlCommand.Dispose();
sqlDataAdapter.Dispose();
sqlConnection.Close();
System.Xml 命名空间
System.Xml 命名空间为处理 XML 提供基于标准的支持。主要成员有如下:
类 |
说明 |
XmlAttribute |
表示一个属性。此属性的有效值和默认值在文档类型定义 (DT D) 或架构中进行定义。 |
XmlAttributeCollection |
表示可以按名称或索引访问的属性的集合。 |
XmlDataDocument |
允许通过相关的 DataSet 存储、检索和操作结构化数据。 |
XmlDeclaration |
表示 XML 声明节点:。 |
XmlDocument |
表示 XML 文档。 |
XmlDocumentFragment |
表示对树插入操作有用的轻量对象。 |
XmlDocumentType |
表示文档类型声明。 |
XmlElement |
表示一个元素。 |
XmlException |
返回有关最后一个异常的详细信息。 |
XmlNode |
表示 XML 文档中的单个节点。 |
XmlNodeReader |
表示提供对 XmlNode 中的 XML 数据进行快速、非缓存的只进访问的读取器。 |
XmlReader |
表示提供对 XML 数据进行快速、非缓存、只进访问的读取器。 |
XmlReaderSettings |
指定在 Create 方法创建的 XmlReader 对象上支持的一组功能。 |
XmlText |
表示元素或属性的文本内容。 |
XmlTextReader |
表示提供对 XML 数据进行快速、非缓存、只进访问的读取器。 |
XmlTextWriter |
表示提供快速、非缓存、只进方法的编写器,该方法生成包含 XML 数据(这些数据符合 W3C 可扩展标记语言 (XM L) 1.0 和“XML 中的命名空间”建议)的流或文件。 |
XmlWriter |
表示一个编写器,该编写器提供一种快速、非缓存和只进的方式来生成包含 XML 数据的流或文件。 |
XmlWriterSettings |
指定在由 System.Xml.XmlWriter.Create 方法创建的 XmlWriter 对象上支持的一组功能。 |
完整实例:
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load("bookstore.xml");
XmlNode root=xmlDoc.SelectSingleNode("bookstore");
XmlElement xe1=xmlDoc.CreateElement("book");
xe1.SetAttribute("genre","李赞红");
xe1.SetAttribute("ISBN","2-3631-4");
XmlElement xesub1=xmlDoc.CreateElement("title");
xesub1.InnerText="CS从入门到精通";
xe1.AppendChild(xesub1);
XmlElement xesub2=xmlDoc.CreateElement("author");
xesub2.InnerText="候捷";
xe1.AppendChild(xesub2);
root.AppendChild(xe1);
xmlDoc.Save("bookstore.xml");
System.IO 命名空间
System.IO 命名空间包含允许读写文件和数据流的类型以及提供基本文件和目录支持的类型。主要成员有如下:
类 |
说明 |
BinaryReader |
用特定的编码将基元数据类型读作二进制值。 |
BinaryWriter |
以二进制形式将基元类型写入流,并支持用特定的编码写入字符串。 |
BufferedStream |
给另一流上的读写操作添加一个缓冲层。 |
Directory |
公开用于创建、移动和枚举通过目录和子目录的静态方法。 |
DirectoryInfo |
公开用于创建、移动和枚举目录和子目录的实例方法。 |
DriveInfo |
提供对有关驱动器的信息的访问。 |
File |
提供用于创建、复制、删除、移动和打开文件的静态方法,并协助创建 FileStream 对象。 |
FileInfo |
提供创建、复制、删除、移动和打开文件的实例方法,并且帮助创建 FileStream 对象。无法继承此类。 |
FileStream |
公开以文件为主的 Stream,既支持同步读写操作,也支持异步读写操作。 |
IOException |
发生 I/O 错误时引发的异常。 |
MemoryStream |
创建其支持存储区为内存的流。 |
Path |
对包含文件或目录路径信息的 String 实例执行操作。这些操作是以跨平台的方式执行的。 |
StreamReader |
实现一个 TextReader,使其以一种特定的编码从字节流中读取字符。 |
StreamWriter |
实现一个 TextWriter,使其以一种特定的编码向流中写入字符。 |
StringReader |
实现从字符串进行读取的 TextReader。 |
StringWriter |
实现一个用于将信息写入字符串的 TextWriter。该信息存储在基础 StringBuilder 中。 |
TextReader |
表示可读取连续字符系列的读取器。 |
TextWriter |
表示可以编写一个有序字符系列的编写器。该类为抽象类。 |
完整实例:
string path = @"c:\temp\MyTest.txt";
if (!File.Exists(path )) // Create a file to write to.
{
using (StreamWriter sw = File.CreateText(path))
{
sw.WriteLine("Hello");
sw.WriteLine("And");
sw.WriteLine("Welcome");
}
}
// Open the file to read from.
using (StreamReader sr = File.OpenText(path))
{
string s = "";
while ((s = sr.ReadLine( )) != null)
{
Console.WriteLine(s);
}
}