【问题标题】:Coding : Using Struct as a DataUtility/Library for Hardcode values (Constants)编码:使用结构作为硬编码值的数据实用程序/库(常量)
【发布时间】:2010-09-11 18:35:54
【问题描述】:

可以将结构用作硬编码值的数据库吗?有时我们无法避免硬编码,尽管最好将其放在 xml 文件或数据库表之类的东西上,但有时由于某些原因是不可能的。

 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;

}

【问题讨论】:

  • 我在回答中忽略了这一点,但你在评论'enums doesnt work in switch case ' 中是什么意思?
  • 如果 BatchStatus 是这样的枚举:enum BatchStatus { 0901XX , 62783XY },并将其放入 case statemesnt 中,如下所示:case BatchStatus.62783XY.ToString(): new Batch()。 Submit() 它抛出异常

标签: c# struct constants


【解决方案1】:

如果您使用的是 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()
  {

  }
}

【讨论】:

  • 静态类还是引用类型吗?结构是值类型并且保存在堆栈中,这意味着它比保存在堆中的类更快地定位
  • 因为静态类永远不能被实例化并且类的所有成员都是静态的,所以类型是引用类型的事实是无关紧要的,因为它的实例永远不会存在于任何地方。不在堆栈或堆上。
  • @CSharpNood,没问题,很高兴我能提供帮助。
猜你喜欢
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
  • 2014-11-28
  • 1970-01-01
  • 1970-01-01
  • 2016-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多