Какое лучшее «место» для хранения структурированных данных только для чтения? - PullRequest
4 голосов
/ 05 июля 2011

Я держу структурированные данные только для чтения в типе enum, теперь я хотел бы расширить структуру и для каждого значения в enum добавить дополнительные поля. Итак, мое оригинальное перечисление:

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

и я хочу расширить их так:

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

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

... и т. Д.

Перечисление не может содержать многомерную структуру данных, так что вообще считается лучшим «местом» для хранения таких структурированных данных? Должен ли я создать класс со свойствами value, filename и id и инициализировать данные в конструкторе класса?

Ответы [ 5 ]

3 голосов
/ 05 июля 2011

Возможно, этот псевдо-enum шаблон будет полезен:

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 };
}
2 голосов
/ 05 июля 2011

Создайте класс или структуру с доступными только для чтения свойствами и полями, подобными этим:

 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;
      }
 }
2 голосов
/ 05 июля 2011

Да, создайте класс OutputFormat со свойствами Value, Filename и ID. Вы можете сохранить данные в XML-файле и проанализировать XML-файл в List или инициализировать объекты OutputFormat где-нибудь в коде.

1 голос
/ 05 июля 2011

Я бы подумал об использовании структуры для этого. Они идеально подходят для таких данных, которые не будут изменены после создания.

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

Andrew

1 голос
/ 05 июля 2011
// 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...