So… why not use simple inheritance? Like:
class MyGenericClass<T>
{
}
class MyGenericClass : MyGenericClass<int>
{
}
This way you can write both ways:
var X = new MyGenericClass<string>();
var Y = new MyGenericClass(); // Is now MyGenericClass<int>