来自C背景,在C#中实现const引用数据表/结构的好方法是什么?

Dar*_*rcy 10 c c#

我将简要介绍一下我熟悉使用C实现的内容.我认为关注的是如何使用数据,而不是我在示例中使用它做的事情:)

typedef struct  
{
  const char  *description;
  uint32_t    colour_id;      
  uint32_t    quantity;
} my_data_t;

const my_data_t ref_data[] =
{
  {"Brown Bear", 0x88,   10},
  {"Blue Horse", 0x666,  42},
  {"Purple Cat", 123456, 50},
};

void show_animals( void )
{
  my_data_t *ptr;

  ptr = &ref_data[2];

  console_write("Animal: %s, Colour: 0x%8X, Num: %d", 
      ptr->description,
      ptr->colour_id,
      ptr->quantity);
}
Run Code Online (Sandbox Code Playgroud)

所以我正在寻找有关如何在C#中实现类似数据表或参考数据的建议.我已经掌握了更高层次的东西,但我还没有处理任何表格驱动的数据方法.

举个例子,我在C#中尝试做的是让一个组合框允许从描述字段中进行选择,而颜色id数量可能用于更新只读框.

这是一个非常简单的例子,但是如果我能确定一个实现它的好方法,我可以推断出我正在做的事情.

Joe*_*Joe 4

我会使用一个ReadOnlyCollection<T>不可变的类。

public class MyData
{
    public MyData(string description, int colorId, int quantity)
    {
        Description = description;
        ColorId = colorId;
        Quantity = quantity;
    }
    public string Description {get; private set; }
    public int ColorId {get; private set; }
    public int Quantity {get; private set; }
}


...

public static readonly ReadOnlyCollection<MyData> refData =
    new ReadOnlyCollection<MyData>(
        new [] {
            new MyData("Brown Bear", 0x88,   10),
            new MyData("Blue Horse", 0x666,  42),
            new MyData("Purple Cat", 123456, 50)
            });
Run Code Online (Sandbox Code Playgroud)