这种模式的问题是您将错过任何不良记录,因为您只是通过简单地处理数据来吞下异常。但是,如果这就是您想要的,那么它就是完美的。
另一种方法是将这些记录推送到错误列表中,并让用户确定在完成后如何处理它们。所以,你可以这样做:
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 个字符。