Vou tentar dar um exemplo que fez sentido quando aprendi.
Na implementação do Result pattern, você cria uma classe genérica, porque não importa que tipo de objeto e suas propriedades ele possui. O importante é saber se foi um sucesso as operações ou caso seja um erro, exibir uma mensagem.
Se você quer fazer um CRUD padrão geralmente tem 5 operações (GetById, GetAll, Create, Update, Delete). Elas geralmente precisam de um ID que geralmente é de tipo fixo: UUID, GUID, LONG, STRING etc. E alguns necessitam de um objeto (que pode ser substituído por um tipo genérico).