C# ISTRUCTURALEQUATABLE TEMEL ÖZELLIKLERI - GENEL BAKış

C# IStructuralEquatable Temel Özellikleri - Genel Bakış

C# IStructuralEquatable Temel Özellikleri - Genel Bakış

Blog Article

Keep in mind that for this interface to work correctly, the types within the collection or structure must also implement IStructuralEquatable or provide their own structural equality logic.

In certain scenarios (such bey using the value type as a key in a dictionary) it gönül murder performance in one foul swoop.

. The best example of this is arrays, which with .NET 4 now implement the IStructuralEquatable interface. This makes it possible to distinguish whether you are comparing two arrays for reference equality, or for "structural equality" - whether they have the same number of items with the same values in each position. Here's an example:

Do hamiş fear because if you simply implement IEquatable the dictionary will use the strongly typed version! The nice thing is that we kind of actually already did this! So now we just have to do this:

It is used by the third example birli an argument to the Equals(Object, IEqualityComparer) method of the IStructuralEquatable interface that tuples implement. It compares two Double or two Single values by using the equality operator. It passes values of any other type to the default equality comparer.

Your browser isn’t supported anymore. Update it to get the best YouTube experience and our latest features. Learn more

The IStructuralEquatable interface enables you to implement customized comparisons to check for the structural equality of collection objects. This is also made clear by the fact that this interface resides in the System.Collections namespace.

In my implementation I delegated the task of calculating hash codes to the internal array. While testing it, to my great surprise, I found that my two different arrays had the same structural hash code

The reason why you need the IStructuralEquatable is for defining a new way of comparision that would be right for all the objects .

I had the same question. When I ran LBushkin's example I was surprised to see that I got a different answer! Even though that answer başmaklık 8 upvotes, it is wrong. After a lot of 'reflector'ing, here is my take on things.

This member is an explicit interface member implementation. It dirilik be used only when the Array instance is cast to an IStructuralEquatable interface.

Now that our struct is immutable the actual issue comes up when you need to compare these values. When I started to write the code to fix the bug I just decided that "hey I have the old values, I hayat just compare each of them":

There is no need for an equality operator that accepts different types. That should not even compile. So this is a very weak C# IStructuralEquatable Temel Özellikleri excuse for having a non-generic interface that works with objects.

Specifically, I do hamiş know the exact type of the object. The only assumption I make is that it inherit from IStructuralEquatable.

Report this page