The issue is with the specific line T.Create(...)
T is a Type, not a variable, so unless the Create() method is a static method of the type, then it wont compile, and even then T doesn't know what create actually is, so you wont be able to compile the function call to begin with. If you constrain T in some manner so that the code knows that the Create() function exists, then you can do this.
Example
Assume T will always be a member or inherited member of some Base class, the function would be declared as follows:
T CreateButton<T>() where T : BusinessObjectBase
{
T test = (T)BusinessObjectBase.create(...some vars...);
return test;
}
In this case, the static function Create() is declared inside the BusinessObjectBase, and the type passed in as T is constrained to be, or be extended from, that class, guaranteeing the code that T will be able to call the Create() function.
Of course, as others have mentioned, its far easier to use the new() constraint. This allows you to simply return new T(); far less complex, but you lose whatever those parameters were from the create function.