Question

I have a class with a Property called 'Value' which is of type Object. Value can be of any type, a structure, a class, an array, IList etc.

My problem is with the setter and determining whether the value has changed or not. This is simple enough for value types, but reference types and lists present a problem.

For a class, would you assume that the Equals method has been implemented correctly, or just assume that the value has changed every time the setter is called? If I did assume it's changed, then perhaps I should assume it for value types as well, so that the behaviour is consistent.

For a list, I could check the size and then every item in the collection to see if they have changed.

How do you guys handle this problem?

Was it helpful?

Solution

Why should you care whether the value has changed or not? Is there a reason why you can't just assume the value changed every time the setter is called?

If there is a good technical reason why, you could always use generics and make your Value of type IEquatable<T> instead of type object. This ensures that the object has implemented the Equals() method.

OTHER TIPS

Instead of having

object Value

you could declare

IEquatable<T> Value

This way you know that all instances of Value will implement the Equals method. Thus you can check equality of two instances.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top