C# 使用空格填充对长度强制执行字符串验证的正确方法

C# 使用空格填充对长度强制执行字符串验证的正确方法,c#,string,validation,csv,properties,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); } }

我必须从我的数据库生成一个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,我想确保我建立了一个可持续的模式。

这个模式的问题是,你会错过任何坏记录,因为你只是简单地篡改数据就吞下了异常。然而,如果这是你想要的,那么它就是完美的

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

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); }
   }
}
this.myString = value.Length > 15 ? value.Substring(0, 15) : value;
如果你坚持承认错误

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

this.myString = value.PadRight(15);

因为我们已经检查了它是否大于15个字符。

如果数据来自您的数据库,并且您的数据库定义了正确的字段长度,为什么要这样做?您需要以固定长度格式导出吗?我认为这个示例没有必要,它实际上可能会导致比预期更多的错误,基于这个示例以及下面提供的单个答案。。重构的圣骑士如果你想从数据库中创建一个.csv文件,有更简单的方法可以通过查询从数据库中获取记录,然后在列表中构建标题有一种方法可以返回列标题,然后从那里你可以构建一个单独的列表,其中包含逗号Delim字段,然后在添加第一行之前,只需将数据从标题列表附加到数据列表,例如..我已经完成了这项工作times@Oded是的,我正在以固定长度CSV导出。数据库中的字段大小不一定相同。i、 e.数据库中的AddressLine1是50,但摘录中是25。您不能使用第三方库吗?可以使这种导出变得非常容易。@DJKRAZE我理解,也许我遗漏了一些东西,但我们的数据库没有反映摘录。当然,这些值来自它,但结构、字段名、字段长度等都是由第三方在定义文件中指定的,我也必须提交这些文件。我非常喜欢这个想法。谢谢问题,如果我用
:)方法然后我会在单独的行上填充吗?好像我可以这么做,
this.myString=value.Length>15?value.Substring(0,15):value.PadRight(15)
,对吗?@RefractedPaladin,是的,这就是你所需要的,因为如果长度大于15,你知道你可以抓住前15个,但如果不是,你知道你只需要填充原始字符串。