Это зависит от того, какие данные вы хотите рандомизировать, потому что way или алгоритма , который вы хотите использовать, полностью отличается в зависимости от типа.
Например:
// Random int
Random r = new Random();
return r.Next();
// Random Guid
return Guid.NewGuid();
...
Так что это, очевидно, делает использование дженериков хорошей иллюстрацией на стороне пользователя, но не добавляет никакой ценности тому, как вы пишете класс. Вы можете использовать предложение switch или словарь (как предлагает Джон Скит):
switch(typeof(T))
{
case System.Int32:
Random r = new Random();
return (T)r.Next();
case System.Guid:
return (T)Guid.NewGuid();
...
Тогда вы будете использовать класс так, как ожидаете:
RandomGenerator.GetData<Guid>();
...