2010-09-11 29 views
2

可以使用Structs作为硬编码值的数据库吗?有时候我们不能避免硬编码,尽管最好将它放在xml文件或数据库表之类的东西上,但有些时候由于某些原因是不可能的。编码:使用结构作为硬编码值(常量)的DataUtility/Library

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

然后我用它像这样

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

我在答复中忽略这一点,但你怎么在评论'的意思是'枚举不工作的开关盒'? – 2010-09-11 18:45:26

+0

如果BatchStatus是这样的枚举:枚举BatchStatus {0901XX,62783XY},并把它放在这样的情况下:case BatchStatus.62783XY.ToString():new Batch()。Submit()它会抛出异常 – CSharpNoob 2010-09-12 04:33:17

回答

2

如果您正在使用C#2.0及以上的,你倒是应该使用一个静态类。在C#2.0之前,您可以使用一个类,只需添加一个private默认构造函数,以确保该类永远不会实例化。

C#2.0和更高版本

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

静态类仍然是一个引用类型?结构体是值类型并保存在堆栈中,这意味着定位比堆中保存的类更快 – CSharpNoob 2010-09-11 18:43:06

+0

由于静态类永远不能实例化,并且类的所有成员都是静态的,因此类型为引用类型是不相关的,因为它的一个实例永远不会存在。不在堆栈或堆上。 – 2010-09-11 18:44:39

+0

谢谢澄清.. – CSharpNoob 2010-09-11 18:51:43