使用空间填充强制执行字符串验证的正确方法

时间:2013-01-04 19:49:07

标签: c# string validation csv properties

我必须从我的数据库生成一个csv文件。我正在使用C#,我可以这样做。我的问题更多与验证有关。我在想这样做:

public class MyObject
{
 private string myString;
 public string MyString
 {
   get
   {
     return this.myString;
   }
   set
   {
     this.myString = value.Remove(15).PadRight(15);
   }
}

显然15是此字段的最大长度。这是一种愚蠢的方式来处理这个问题吗?我愿意接受建议。这只是该计划的冰山一角,将产生许多不同的csv,我想确保我建立一个可持续的模式。

1 个答案:

答案 0 :(得分:2)

这种模式的问题在于,您将错过任何不良记录,因为您只是通过按摩数据来吞咽异常。但是,如果这就是你想要的那么它就是完美的。

另一种方法是将这些记录推送到错误列表,并让用户在完成所有操作后确定如何处理它们。所以,你可以这样做:

public sealed class BadRecords
{
    private static BadRecords _instance;
    public static BadRecords Instance
    {
        if (_instance == null) { _instance = new BadRecords(); }
        return _instance;
    }

    private BadRecords() { this.List = new List<MyObject>(); }

    public List<MyObject> List { get; set; }
}

public class MyObject
{
 private string myString;
 public string MyString
 {
   get
   {
     return this.myString;
   }
   set
   {
     if (value.Length > 15) { BadRecords.Instanse.List.Add(this); }
     else { this.myString = value.Remove(15).PadRight(15); }
   }
}

但是,您的解决方案仍然存在一个问题,您实际上并不只是前15个字符。实际上,您所拥有的代码会在小于15个字符的字符串上出错。考虑更像这样的事情:

this.myString = value.Length > 15 ? value.Substring(0, 15) : value;

如果你坚持吞下错误。

但是,在我提供的解决方案中,您可以简单地使用它:

this.myString = value.PadRight(15);

因为我们已经检查过它是否超过15个字符。