このパターンの問題は、単にデータを処理することで例外を飲み込んでしまうため、不良レコードを見逃すことになります。ただし、それが必要な場合は完璧です。
もう 1 つの方法は、これらのレコードをエラー リストにプッシュし、すべての処理が完了した後にユーザーが何をするかを決定できるようにすることです。したがって、次のようなことができます。
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); }
}
}
ただし、ソリューションにはまだ 1 つの問題があります。最初の 15 文字だけを取得しているわけではありません。実際、あなたが持っているコードは、15 文字未満の文字列でエラーになります。次のようなものを検討してください。
this.myString = value.Length > 15 ? value.Substring(0, 15) : value;
エラーを飲み込むことに固執している場合。
ただし、私が提供したソリューションでは、これを簡単に使用できます。
this.myString = value.PadRight(15);
15 文字を超えているかどうかは既に確認済みだからです。