不要打败一个 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 属性可以为空,因此我必须创建一个方法(从此处提取)来处理解析(这将用于在外部以及在构造函数中解析数据。例如:
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;
}
}
显然你会想要创建额外的构造函数,并且可能有一个匹配的类型构造函数作为你的默认值。