尝试在属性 (C#) 中将字符串解析为日期时间
本文关键字:字符串 时间 日期 属性 | 更新日期: 2023-09-27 18:35:22
我试图解析一个字符串一个日期时间对象。没有问题:-)当我尝试直接在属性集方法中执行此操作时,我的问题来了。
我以为我可以这样做:
private DateTime _fromDate;
public DateTime FromDate
{
get { return _fromDate; }
set { _fromDate = DateTime.Parse(value); }
}
但是我收到此错误:
"参数 1:无法从'System.DateTime'转换为'字符串'"
有谁知道该怎么做,如果可以做到的话?
>_fromDate
的类型为 DateTime
。
DateTime.Parse
取string
并返回DateTime
。
您正在传入已经是DateTime
的value
并且没有将DateTime
隐式转换为string
。
如果要直接将string
解析为DateTime
,则需要一个新属性,该属性是string
类型:
private DateTime _fromDate;
public string FromDate
{
get { return _fromDate.ToString(); }
set { _fromDate = DateTime.Parse(value); }
}
尽管您需要 a) 对字符串的格式进行一些控制,并且 b) 对输入字符串进行一些安全检查,以确保它不会在不是有效日期时引发异常。
该属性的类型为 DateTime
; 您根本无法将字符串作为值传递,即使您打算自己将其转换为DateTime
。
用更专业的术语来说,此属性会导致你的类有一个方法
public DateTime get_FromDate(DateTime value)
{
// your property setter code here
}
该方法采用DateTime
参数,并且无法更改该参数。
如果要为类的用户提供一种将字符串转换为DateTime
的便捷方法(可能是使用非平凡处理的方法),则可以将转换作为类上的方法公开。用户每次都必须显式调用它,但这就是生活。
您已经将参数作为DateTime
获取,因此无需解析它。
如果你真的坚持要解析它,把它转换成一个字符串
set { _fromDate = DateTime.Parse(value.ToString()); }
但是如果你这样做,你会得到一个日期时间,将其转换为字符串,然后将其转换回日期时间,即......好吧,不是辉煌的:)
不是为了打败一匹 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;
}
}
显然,您可能希望创建其他构造函数,并且可能将匹配的类型构造函数作为默认值。
简单使用
private DateTime _fromDate;
public DateTime FromDate
{
get { return _fromDate; }
set { _fromDate = value; }
}
value
将DateTime
,因为该物业是DateTime
。当有人将此属性分配给一个DateTime object
它将进入value
。在"设置"中,该值将分配给_fromDate
您会收到编译器错误,因为DateTime.Parse(string s)
采用string
输入参数,但value
的类型为 DateTime
,无法隐式转换为 string
。
您不需要解析该值,因为它已经DateTime
,因此您可以将代码更改为set { _fromDate = value; }