2010-09-11 4 views
2

Est-il acceptable d'utiliser Structs comme bibliothèque de données pour les valeurs codées en dur? Parfois, nous ne pouvons pas éviter le codage en dur bien qu'il soit préférable de le mettre sur quelque chose comme un fichier xml ou une table de base de données, mais parfois ce n'est pas possible pour certaines raisons.Codage: Utilisation de Struct en tant que DataUtility/Library pour les valeurs de code fixe (Constantes)

public struct BatchStatus 
{ 
    public const string Submitted = "0901XX"; 
    public const string Active = "62783XY"; 
    public const string Inactive = "S23123"; 
} 

alors je l'utiliser comme ceci

switch (batchStatus) // enums doesnt work in switch case 
{ 
    case BatchStatus.Submitted: 
     new Batch().Submit(); break; 
    case BatchStatus.Inactive: 
     new Batch1().Activate(); break; 
    case BatchStatus.Active 
     new Batch2().Deactivate(); break; 

} 
+2

Je n'a pas tenu compte dans ma réponse, mais que voulez-vous dire dans le commentaire ' 'énumérations doesnt travail commutateur cas »? –

+0

Je le si BatchStatus est un enum comme ceci: enum BatchStatus {0901XX, 62783XY}, et le mettre dans le cas statemesnt comme ceci: cas BatchStatus.62783XY.ToString(): nouveau Batch(). Submit() il lève l'exception – CSharpNoob

Répondre

2

Si vous utilisez C# 2.0 et au-dessus, vous devriez plutôt utiliser une classe statique. Avant C# 2.0, vous pouvez utiliser une classe et ajouter un constructeur par défaut private pour vous assurer que la classe n'est jamais instanciée.

C# 2.0 et versions ultérieures

public static class BatchStatus 
{ 
    public const string Submitted = "0901XX"; 
    public const string Active = "62783XY"; 
    public const string Inactive = "S23123"; 
} 

C# 1.0 - 1,2

public class BatchStatus 
{ 
    public const string Submitted = "0901XX"; 
    public const string Active = "62783XY"; 
    public const string Inactive = "S23123"; 

    private BatchStatus() 
    { 

    } 
} 
+0

est la classe statique est toujours un type de référence? Les structs sont de type valeur et sont sauvegardés dans la pile ce qui signifie qu'ils sont plus rapides à localiser que les classes qui sont sauvegardées dans le tas – CSharpNoob

+0

Puisque la classe statique ne peut jamais être instanciée et que tous les membres de la classe sont statiques, le type est Le type de référence n'est pas pertinent car une instance de celui-ci n'existera jamais nulle part. pas sur la pile ou le tas. –

+0

merci pour la clarification .. – CSharpNoob

Questions connexes