Tuples require the following to be true for the objects to be considered “equal”:
- Must be a Tuple object with the same number of generic parameter(s) as the current object.
- Each of those generic parameters must be of the same type as the other.
- Each member of the tuple must have the same value as the corresponding member of the other.
So, because a Tuple<object> has a different generic parameter than a Tuple<string>, they are not equal even if the object is actually a reference to a string of the same value as the strongly-typed Tuple<string>.