4 年間の死んだ馬を打ち負かすわけではありませんが、OP と同様の思考プロセスでこのスレッドに出くわし、このトピックに関する私の個人的な調査結果を要約したいと思いました。最終的に、既存のオブジェクトの DateTime プロパティを設定する場合は、事前に解析する必要があります (以前の回答が示唆しているように)。ただし、実際にはオブジェクトの初期化に関心があり、コンストラクターで解析されるテキスト値を渡すことが できます。
public class SomeClass
{
public SomeClass(String date)
{
DateTime tmpDate;
DateTime.TryParse(date, out tmpDate);
if (tmpDate != DateTime.Minvalue)
{
FromDate = tmpDate;
}
else
{
throw new ArgumentError(("Unable to parse the input string " + date));
}
私の特定のケースでは、DateTime プロパティを null 可能にしたかったので、解析を処理するメソッド ( here から取得) を作成する必要がありました (これは、コンストラクター内だけでなく外部でもデータを解析するために使用されます。例:
public class SomeClass
{
public SomeClass(String date)
{
DateTime? tmpDate = this.TryParse(date);
if (tmpDate.hasValue)
{
FromDate = tmpDate;
}
else
{
throw new ArgumentError(("Unable to parse the input string " + date));
}
}
public DateTime? FromDate { get; set;}
public DateTime? TryParse(string text)
{
DateTime date;
if (DateTime.TryParse(text, out date))
{
return date;
}
else
{
return null;
}
}
明らかに、追加のコンストラクターを作成し、おそらく一致する型コンストラクターをデフォルトとして使用する必要があります。