保存只读结构化数据的最佳“位置”是什么?

时间:2011-07-05 07:41:01

标签: c# class struct

我在枚举类型中持有结构化只读数据,现在我想扩展结构并为枚举中的每个值添加其他字段。所以,我原来的枚举是:

public enum OutputFormats { Pdf, Jpg, Png, Tiff, Ps };

我希望像这样扩展它们:

Value=Pdf
FileName="*.PDF"
ID=1

Value=Jpg
FileName="*.jpg"
ID=2

......等等。

枚举不能保存多维数据结构,那么通常认为什么是保存此类结构化数据的最佳“位置”?我应该创建一个包含valuefilenameid属性的类,并在类构造函数中初始化数据吗?

5 个答案:

答案 0 :(得分:3)

也许这种伪枚举模式会很有用:

public class OutputFormats
{
    public readonly string Value;
    public readonly string Filename;
    public readonly int ID;

    private OutputFormats(string value, string filename, int id)
    {
        this.Value = value;
        this.Filename = filename;
        this.ID = id;
    }

    public static readonly OutputFormats Pdf = new OutputFormats("Pdf", "*.PDF", 1);
    public static readonly OutputFormats Jpg = new OutputFormats("Jpg", "*.JPG", 2);
}

另一种变化,也许更简洁:

public class OutputFormats
{
    public string Value { get; private set; }
    public string Filename { get; private set; }
    public int ID { get; private set; }

    private OutputFormats() { }

    public static readonly OutputFormats Pdf = new OutputFormats() { Value = "Pdf", Filename  = "*.PDF", ID = 1 };
    public static readonly OutputFormats Jpg = new OutputFormats() { Value = "Jpg", Filename = "*.JPG", ID = 2 };
}

答案 1 :(得分:2)

是的,使用Value,Filename和ID属性创建一个OutputFormat类。您可以将数据存储在XML文件中并将XML文件解析为List,也可以在代码中的某处初始化OutputFormat对象。

答案 2 :(得分:2)

使用readonly属性和字段创建一个类或结构,如下所示:

 struct OutputFormat
 {
      public int Id { get; private set; }
      public OutputFormats Format { get; private set; }
      public string Filename { get; private set; }

      public OutputFormat(int id, OutputFormats format, string filename)
      {
          Id = id;
          Format = format; 
          Filename = filename;
      }
 }

答案 3 :(得分:1)

// using a string key makes it easier to extend with new format.
public interface IOutputRepository
{
    //return null if the format was not found
    Output Get(string name);
}

// fetch a format using a static class with const strings.
var output = repository.Get(OutputFormats.Pdf);

答案 4 :(得分:1)

我认为我会考虑使用结构。它们非常适合这样的数据,一旦创建就不会更改。

http://msdn.microsoft.com/en-us/library/ah19swz4(v=vs.71).aspx

安德鲁