C # 7.3 Restrição de enum: por que não consigo usar a palavra-chave enum?
Para restringir um parâmetro de tipo genérico a ser de um tipo enum, eu os restringi anteriormente desta forma, o melhor que eu poderia usar para restringir o tipo T para enumerações no pré-C # 7.3:
void DoSomething<T>() where T : struct, IComparable, IConvertible, IFormattable
Agora, o C # 7.3 adiciona um novo recurso para restringir um tipo genérico aSystem.Enum
. Eu tentei usar a restrição enum com oAtualização do VS2017 15.7 lançada hojee é compilado com êxito quando o escrevo assim (dado que tenho umusing System;
directiva):
void DoSomething<T>() where T : Enum
No entanto, usando oenum
A palavra-chave não funciona e faz com que o compilador lance os seguintes erros (há mais erros a seguir, esperando um corpo de método, mas não vale a pena mencionar aqui, acho):
void DoSomething<T>() where T : enum
^ error CS1031: Type expected
error CS1002: ; expected
^ error CS1001: Identifier expected
error CS1514: { expected
error CS1513: } expected
Como existe umastruct
restrição trabalhando para estruturas, eu não entendo por queenum
não funciona aqui para enumerações. É verdade queenum
não mapeia para um tipo real comoint
faria porInt32
, mas achei que deveria se comportar da mesma maneira que ostruct
restrição.
Acabei de cair em uma armadilha experimental de recursos que ainda não estava totalmente implementada ou isso foi feito de propósito na especificação (por quê?)?