限制属性上的字符串长度

时间:2010-03-04 21:06:20

标签: c# reflection

这个问题出现在我试图找出一个更大的问题时,为了简单起见,我忽略了。

我必须在C#中表示某个数据结构。它是一个用于与外部系统通信的协议。因此,它具有一系列具有预定义长度和整数(或其他更复杂数据)的字符串。我们假设:

SYSTEM : four chars
APPLICATION : eight chars
ID : four-byte integer

现在,我首选的方法是使用字符串,所以

class Message
{
    string System {get; set; };      // four characters only!
    string Application {get; set; }; // eight chars
    int Id {get; set; };
}

问题是:我必须确保字符串的长度不超过预定义长度。此外,这个标题实际上有十分之一的字段,这些字段会不时地改变(我们仍在决定消息布局)。

如何描述这种结构的最佳方式?我想,例如,使用带有数据描述的XML并使用反射来创建一个遵循实现的类(因为我需要以编程方式访问它)。

而且,正如我所说,还有更多麻烦。我有其他类型的数据类型限制字符/数字的数量...

1 个答案:

答案 0 :(得分:8)

对于初学者:全长问题。这很容易通过不使用自动属性来解决,而是声明自己的字段并以“老式”方式编写属性。然后,您可以在setter中验证您的需求,并抛出异常或丢弃新值,如果它无效。

对于更改结构:如果不可能只是进入并更改类,您可以编写一个使用Dictionary(好吧,可能是每个要存储的数据类型一个)的解决方案来将名称与值相关联。添加某种文件(可能是XML),描述允许的字段,类型和验证要求。

然而,如果它只是因为你尚未确定最终结构而改变,我可能更愿意只更改类 - 如果在部署应用程序时不需要那种动态结构,它看起来像浪费时间,因为你可能最终花费更多的时间来编写动态的东西,而不是改变课程。