C# IStructuralEquatable nerelerde kullanılıyor Sırları

Wiki Article

If equality is not needed for the derived class you sevimli skip IEquatable but you need to override the CanEqual to prevent it being equal with base classes (unless of course they should be considered equal).

1 How do such comparators relate to things like Dictionary and other collections? I know that Dictionary seems to handle structures sensibly albeit slowly in .

Other types which implement structural equality/comparability include tuples and anonymous types - which both clearly benefit from the ability to perform comparison based on their structure and content. A question you didn't ask is:

Kakım far kakım I see this is only exposed through the StructuralComparisons class. The only way I sevimli figure out to make this useful is to make a StructuralEqualityComparer helper class kakım follow:

Bey an example, it might make sense for two different instances of an Employee class to be considered equal if they both represent the same entity in your system.

I never put much thought into using a struct over a class or even additional optimizations because to me the struct was optimized already. When I was working on fixing a bug in our DeviceDisplay to hamiş trigger new events unless a value changed a whole new world opened up to me.

Aynı alışverişlemi her bir iterasyon için bir task oluşturup yapabiliyorken münasebet Koşut bir döngü oluşturmalıyız?

Coming soon: Throughout 2024 we will be phasing out GitHub Issues birli the feedback mechanism for content and replacing it with a new feedback system. For more information see: .

Ray BooysenRay Booysen 29.6k1414 gold badges8686 silver badges111111 bronze badges 6 so when you are dealing with objects, is == assumed to only mean the exact same memory address (same instance)

If you read this entire post and are thinking wow that is a lot of code and steps to remember then do derece fear because Dustin told me and showed me that Visual Studio will generate all of this for you!!!!! Check this out:

To achieve this, employee objects with matching SSN properties would be treated as logically equal, even if they were hamiş structurally equal. Share Improve this answer Follow

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 kişi just compare each of them":

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

Being able to specify IStructuralEquatable/IStructuralComparable in such cases is actually useful. It would also be inconvenient to pass a TupleComparer or ArrayComparer everywhere you want to apply this type of comparison. The two approaches are derece mutually exclusive.

Report this wiki page