Custom Dynamic Array
Just a couple of minor points:


In your constructor, you create an the array with an initial size of 4: 

_items = new T[4];


However in your Clear method you set it to an size of 2:

_items = new T[2];


It's odd that you set it to a smaller number.  If you had a constant for initial size, or called Clear from the constructor this could be avoided.
That said, do you really want clear to discard _items?  If you're reusing the array in a similar section of code, it seems reasonable to assume that after Clear has been called, there is a good chance the the array would grow again to a similar size.  It may be more efficient to simply reset _size, but leave _items intact.  Obviously this depends how you're using the array as to whether or not it's a good idea...
You don't limit the size of the array.  Dynamic doubling whilst efficient, can get big pretty quick.  You might want to consider adding a maximum size to your array, again, this would depend on what you're using it for as to whether or not it's worth while.  List limits it's growth for example, albeit to a rather large number.