IL generics - what rules exist for when !T is used vs !0?
===

I'm writing an IL static analysis tool, and I'm having a hard time understanding the rules governing how generic type parameters are referenced:

take this IL (from IList&lt;T&gt;):

    .property instance !T Item(
        int32 index
    )
    {
        .get instance !0 System.Collections.Generic.IList`1::get_Item(int32)
        .set instance void System.Collections.Generic.IList`1::set_Item(int32, !0)
    }

Why are the !0 there instead of !T?  I presume they're equivalent as far as the VM goes, it just seems odd to use positional references at all when you're guaranteed to have the names.