var selfLength = this.Stream.Length;
var otherLength = other.Stream.Length;
- // Enumerable.Take() が int 型しか受け付けないのでとりあえず int 型の範囲まで許容
- if (selfLength > int.MaxValue || otherLength > int.MaxValue)
- throw new ArgumentOutOfRangeException();
+ if (selfLength != otherLength)
+ return false;
+
+ var selfBuffer = this.Stream.GetBuffer();
+ var otherBuffer = other.Stream.GetBuffer();
- var selfBytes = this.Stream.GetBuffer().Take((int)this.Stream.Length);
- var otherBytes = other.Stream.GetBuffer().Take((int)this.Stream.Length);
+ for (var pos = 0L; pos < selfLength; pos++)
+ {
+ if (selfBuffer[pos] != otherBuffer[pos])
+ return false;
+ }
- return selfBytes.SequenceEqual(otherBytes);
+ return true;
}
object ICloneable.Clone()