Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>The implementation of <code>SequenceEqual</code> is kind of similar::</p> <pre><code>using (IEnumerator&lt;TSource&gt; enumerator1 = first.GetEnumerator()) using (IEnumerator&lt;TSource&gt; enumerator2 = second.GetEnumerator()) { while (enumerator1.MoveNext()) { if (!enumerator2.MoveNext() || !comparer.Equals(enumerator1.Current, enumerator2.Current)) { return false; } } if (enumerator2.MoveNext()) { return false; } } return true; </code></pre> <p>This default <code>SequenceEqual</code> method use default <code>EqualityComparer&lt;int&gt;.Default</code> for <code>int</code> which is value equality.</p> <p><code>Array</code> implement <code>IStructuralEquatable</code> with <code>Equal</code> method:</p> <pre><code>bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer) { if (other == null) return false; if (!object.ReferenceEquals(this, other)) { Array array = other as Array; if ((array == null) || (array.Length != this.Length)) { return false; } for (int i = 0; i &lt; array.Length; i++) { object x = this.GetValue(i); object y = array.GetValue(i); if (!comparer.Equals(x, y)) { return false; } } } return true; } </code></pre> <p>The <code>IEqualityComparer</code> from input parameter is used, in here you input <code>StructruralEqualityComparer</code> but <code>int</code> does not implement <code>IStructruralEquatable</code>, so it uses default comparer for <code>int</code> which is value equality.</p> <p>But, needless to input <code>StructruralEqualityComparer</code> because <code>int</code> is not structural, you should just use:</p> <pre><code>(arr1 as IStructuralEquatable).Equals(arr2, EqualityComparer&lt;int&gt;.Default); </code></pre> <p>It still works. You should use <code>StructruralEqualityComparer</code> if item in array is <em>structrural</em></p> <p>So to sum up, the implementation for both is kind of the same, both iterate two array based on value equality of <code>int</code> to make comparison.</p> <p>I would prefer the LINQ verson since it is more readable.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload