.NET Framework - 字符串, System.String 类

创建时间:
2015-03-09 22:41
最近更新:
2018-08-11 22:58

Resource

  1. 字符串驻留池的另类用法 - string.Intern, string.IsInterned

Remove(int) 的坑

测试代码: "abc".Remove(idx),测试结果:
idx 为 0 时 返回 ""
idx 为 1 时 返回 "a"
idx 为 2 时 返回 "ab"
idx 为 3 时 抛出 System.ArgumentOutOfRangeException "startIndex 必须小于字符串长度。"
这导致该方法至少要删除 1 个字符。

System.String 类中与 子串、截取、修剪 相关的全部方法

public string Remove(int startIndex); //删除 从 startIndex 指定位置至最末 的字符。
public string Remove(int startIndex, int count); //删除 从 startIndex 指定位置开始的 count 个字符。

public string Substring(int startIndex); //返回 从 startIndex 至末尾 的子串。
public string Substring(int startIndex, int length); //返回 从 startIndex 开始的 length 个字符。

public string Trim(); //从当前字符串的开头和结尾删除所有空白字符后剩余的字符串。
public string Trim(params char[] trimChars); // 从当前字符串的开头和结尾删除所出现的所有 trimChars 参数中的字符后剩余的字符串。如果 trimChars 为 null 或空数组,则改为移除空白字符。
public string TrimEnd(params char[] trimChars); // 从当前字符串的结尾移除所出现的所有 trimChars 参数中的字符后剩余的字符串。如果 trimChars 为 null 或空数组,则改为删除 Unicode 空白字符。
public string TrimStart(params char[] trimChars); // 从当前字符串的开头移除所出现的所有 trimChars 参数中的字符后剩余的字符串。如果 trimChars 为 null 或空数组,则改为移除空白字符。

Test - System.String.GetHashCode() 只是散列、而非唯一

static void Main(string[] args)
{
	int hashCode0 = "0.89265452879139".GetHashCode();
	int hashCode1 = "0.280527401380486".GetHashCode();
	Console.Write(hashCode0 == hashCode1); //true
}

注意:
至少已知 .NET Framework 1 与 .NET Framework 2 中 System.String.GetHashCode() 的实现不一致,即:
对于相同的字符串,不同版本的 .NET Framework 下的实现,返回的 int 值不相同。

源码分析 - ToString()

System.String 类中共有以下两个 ToString(),均直接 return this

[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
[__DynamicallyInvokable]
public override string ToString()
{
	return this;
}

[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
public string ToString(IFormatProvider provider)
{
	return this;
}