2017-10-01 2 views
1

À votre santé! J'ai eu deux énumérations, décrivant mes entityes: Les joueurs et fusils types:C# enum comme générique

public enum PlayersType { 
    Scout, 
    Tank 
} 

public enum GunsType { 
    Machinegun, 
    Tesla 
} 

J'ai eu un générique d'une classe générique struct, et 2 réalisations de celui-ci:

public class EntityType<T> where T: struct, IConvertible { 
    public GameObjectType ObjectType; 
} 

public class PlayerEntity: EntityType<PlayersType> { } 

public class TowerEntity: EntityType<GunsType> { } 

Et je veux créer class, qui possède un champ EntityType et une classe ScriptableObject héritée.

Je l'ai fait:

public class ObjectTypeConfig: ScriptableObject 
{ 
    public EntityType<Enum> EntityType; 
} 

Mais son erreur de retour:

The type 'System.Enum' must be a non-nullable value type in order to use it as type parameter `T' in the generic type or method.

Est-ce que quelqu'un sait comment puis-je créer le terrain nécessaire? Par conséquent, je veux créer une classe, qui aura un tableau de ObjectTypeConfigs, contenant des entités Players et Towers.

+0

Avez-un des Les réponses suivantes vous ont aidé à comprendre et à résoudre le problème? –

Répondre

2

Vous avez déclaré que la propriété EntityType<Enum> mais EntityType a la contrainte générique de EntityType<T> where T : struct.

Les moyens struct constraint:

The type argument must be a value type. Any value type except Nullable can be specified

Si vous cochez Enum vous le voyez est une classe - et peut donc être attribué null et ne satisfait pas aux contraintes génériques spécifiées.

Je suppose que vous voulez un des deux:

  1. propriété Changement d'être EntityType<GunsType> ou EntityType<PlayersType>
  2. Faire la trop générique classe ObjectTypeConfig avec les mêmes contraintes et EntityType<T> EntityType
0
public class ObjectTypeConfig<T>: ScriptableObject where T: struct, IConvertible 
{ 
    public EntityType<T> EntityType; 
}