【问题标题】:Limiting a String length on a property限制属性的字符串长度
【发布时间】:2010-03-04 21:06:20
【问题描述】:

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

我必须在 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 并使用反射来创建一个遵循实现的类(因为我需要以编程方式访问它)。

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

【问题讨论】:

    标签: c# reflection


    【解决方案1】:

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

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

    但是,如果它只是因为您还没有决定最终结构而发生变化,我可能更喜欢只更改类 - 如果您在部署应用程序时不需要那种动态结构,看起来像浪费时间,因为您最终可能会花费更多时间来编写动态内容,而不是更改类。

    【讨论】:

    • +1 这三段非常准确地描述了我对这个问题的想法,以至于我真的很害怕。
    • Michael,很好的答案,主要是因为它坚持 KISS。但是,我使用 XML 的愿望是允许非 c# 程序员更改数据的描述。我不喜欢改变班级的想法,因为涉及的努力。但也许我只是懒惰。为简单起见 +1。
    • @Bruno:我对您的具体情况了解得不够多,无法知道让他们这样做是否有任何意义,但请记住,仅更改此类的定义是不够的。无论如何,您都需要代码来处理这些新的和更改的字段 - 需要知道如何在此类中加载和存储内容。另外,既然您说这是与外部系统通信的协议的抽象,那么该系统将如何知道如何处理这些更改?
    • 基于此,我不确定允许这样做是否有意义 - 但如果它确实有意义,请确保您真的需要它™。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 2011-04-19
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多