哪里是最好的“地方”?保存只读的结构化数据
本文关键字:保存 只读 数据 结构化 地方 | 更新日期: 2023-09-27 18:01:15
我在枚举类型中持有结构化只读数据,现在我想扩展结构,并为枚举中的每个值添加额外的字段。所以,我原来的enum是:
public enum OutputFormats { Pdf, Jpg, Png, Tiff, Ps };
,我想这样扩展它们:
Value=Pdf
FileName="*.PDF"
ID=1
Value=Jpg
FileName="*.jpg"
ID=2
…等等。
枚举不能保存多维数据结构,那么通常认为保存这种结构化数据的最佳"位置"是什么?我应该创建一个具有value
, filename
和id
属性的类,并在类构造函数中初始化数据吗?
也许这个伪枚举模式会有用:
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 };
}
是的,创建一个具有Value, Filename和ID属性的OutputFormat类。您可以将数据存储在XML文件中,并将XML文件解析为List,或者您可以在代码的某个地方初始化OutputFormat对象。
创建一个具有只读属性和字段的类或结构:
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;
}
}
// 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);
我想我会考虑使用结构体。对于这样的数据,它们是理想的,一旦创建就不会更改。
http://msdn.microsoft.com/en-us/library/ah19swz4 (v = vs.71) . aspx
安德鲁