C#中的字符串的一些知识点
代码例子请参考原文.
1. 字符串是 String 类型的对象,它的值是文本。在内部,这些文本存储为 Char 对象的只读集合,其中每个对象都表示一个以 UTF-16 编码的 Unicode 字符。C# 字符串末尾没有以 null 结尾的字符(这一点与 C 和 C++ 不同),因此 C# 字符串可以包含任意数目的嵌入式 null 字符(“\0”)。字符串长度表示字符数目,无论这些字符是否是由 Unicode 代理项对形成的。若要访问字符串中的各个 Unicode 码位,请使用 StringInfo 对象。
2. 在 C# 中,string 关键字是 System.String 的别名。因此,String 与 string 等效,您可以根据自己的喜好选择命名约定。String 类提供了很多用于安全地创建、操作和比较字符串的方法。此外,C# 语言还重载某些运算符来简化常见的字符串操作。有关关键字的更多信息,请参见string(C# 参考)。有关类型及其方法的更多信息,请参见 String。
3. 注意,除了在使用字符数组初始化字符串时以外,不要使用 new 运算符创建字符串对象。
4. 使用 Empty 常量值初始化字符串可新建字符串长度为零的 String 对象。零长度字符串的字符串表示形式为 ""。使用 Empty 值(而不是 null)初始化字符串可以降低发生 NullReferenceException 的可能性。请在尝试访问字符串之前使用静态 IsNullOrEmpty(String) 方法验证字符串的值。
5. 字符串对象是不可变的:即它们创建之后就无法更改。所有看似修改字符串的 String 方法和 C# 运算符实际上都以新字符串对象的形式返回结果。在下面的示例中,当连接 s1 和 s2 的内容以形成一个字符串时,不会修改两个原始字符串。+= 运算符会创建一个包含组合内容的新字符串。这个新对象赋给变量 s1,而最初赋给 s1 的对象由于没有其他任何变量包含对它的引用而释放,用于垃圾回收。
6. 格式字符串是内容可以在运行时动态确定的一种字符串。采用以下方式创建格式字符串:使用静态 Format 方法并在大括号中嵌入占位符,这些占位符将在运行时替换为其他值。
WriteLine 方法的一个重载将格式字符串用作参数。因此,可以只嵌入格式字符串,而无需显式调用该方法。但若使用 WriteLine 方法在 Visual Studio“输出”窗口中显示调试输出,则必须显式调用 Format 方法,因为 WriteLine 只接受字符串,而不接受格式字符串。有关格式字符串的更多信息,请参见格式化类型。
7. 空字符串是不包含字符的 System..::.String 对象的实例。在各种编程方案中经常会使用空字符串表示空白文本字段。可以对空字符串调用方法,因为它们是有效的 System..::.String 对象. 相反,null 字符串并不引用 System..::.String 对象的实例,任何对 null 字符串调用方法的尝试都会生成 NullReferenceException。但是,可以在串联和比较操作中将 null 字符串与其他字符串一起使用。
8. .NET 中的字符串操作已高度优化,大多数情况下不会显著影响性能。但在某些应用场景中,例如在执行好几百甚至好几千次的紧凑循环中,字符串操作会影响性能。StringBuilder 类创建了一个字符串缓冲区,用于在程序执行大量字符串操作时提供更好的性能。StringBuilder 字符串还使您能够重新分配个别字符(内置字符串数据类型所不支持的字符)。
9. 由于 String 类型实现 IEnumerable<(Of <(T>)>),因此可以对字符串使用 Enumerable 类中定义的扩展方法。对于 String 类型,为了避免视觉上的混乱,从 IntelliSense 中排除了这些方法,但这些方法仍然可用。此外,还可以对字符串使用 LINQ 查询表达式。有关更多信息,请参见 LINQ 和字符串。
原文地址: