Arrays, inheritance, generics
I'm not completely sure what are you trying to accomplish, but I think this is bad and very confusing code.

You seem to be using the interface IEquatable&lt;T&gt; to mean “T, or a type that has some relation to T”. That's not what it's meant for at all!

Also, the point of interfaces is to be able to use different types in the same way. For example, if I have a IEnumerable&lt;string&gt;, I know I can iterate over it using a foreach and process the strings it gives me.

But that does not apply to your interface. I have to know whether I have have Simpleton&lt;T&gt; (I have to pass T to it) or ArrayExpectant&lt;T&gt; (I have to pass ArrayWrapper&lt;T&gt; to it).

Because of this, I would suggest you to drop the interface completely, I don't see any benefit of having it.