I have the following class:

```
public class Item<TItem>
    where TItem : Item<TItem>
{
    void GetReference()
    {
        TItem item = this;
    }
}

```

Here `TItem item = this;` generates a compiler error "can't convert `Item<TItem>` implicitly to `TItem`".

But why do we need a conversion here? We have defined the constraint `where TItem : Item<TItem>`, so one can think that no conversion is needed at all since the two types are the same, aren't they?

Btw an explicit conversion is available. This also is stated in the compiler error.