StringBuilder
에는 Equals
의 두 가지 오버로드가있어 예상치 못한 일이 발생할 수 있습니다.
Equals(Object)
오버로드는 Object에서 상속되며 참조를 비교합니다.
Equals(StringBuilder)
과부하는 콘텐츠, 용량 및 최대 용량을 비교합니다.
두 가지 오버로드 중 두 번째를 호출하는 것처럼 보입니다.
StringBuilder는 동적으로 용량을 확장하므로 두 StringBuilder 인스턴스를 비교 한 결과는 각각에 대해 수행 된 정확한 작업 순서 (예 : 추가, 바꾸기, 제거 등)에 따라 달라집니다. 이 결과를 제공 예를 들어
당신은 설명 :
StringBuilder sb1 = new StringBuilder(), sb2 = new StringBuilder();
sb1.Append("something").Append('1', 100).Replace("1", "");
sb2.Append("something");
Console.WriteLine(sb1.Equals(sb2)); // False
Console.WriteLine(sb1.ToString().Equals(sb2.ToString())); // True
만 내용을 비교하지만 당신이 원하지 않는 경우에 당신이 쉽게 자신의 비교를 쓸 수있는 내장 할 방법이없는 것 같다 비교시 문자열 할당 :
public static bool Equals(StrinBuilder left, StringBuilder right)
{
if (left.Length != right.Length)
return false;
int length = left.Length;
for(int i = 0; i < length; i++)
if (left[i] != right[i])
return false;
return true;
}
이 위대한 설명에 감사드립니다! 나에게 용량과 maxCapacity가 "같음"에 사용되지만 두 번째 오버로드가 예상대로 작동하지 않는 이유 (내용 만)가 분명히 설명됩니다. –