0

我试图解析一个 DateTime 对象的字符串。没问题 :-) 当我尝试直接在属性集方法中执行此操作时,我的问题来了。

我以为我可以这样做:

        private DateTime _fromDate;
        public DateTime FromDate
        {
            get { return _fromDate; }
            set { _fromDate = DateTime.Parse(value); }
        }

但我得到这个错误:

“参数 1:无法从 'System.DateTime' 转换为 'string'”

有谁知道如何做到这一点,如果它可以做到吗?

4

6 回答 6

3

_fromDate是类型DateTime

DateTime.Parse接受 astring并返回 a DateTime

您正在传入value which is already aDateTime并且没有 to 的隐式DateTime转换string

如果你想直接将 a 解析string成 aDateTime那么你需要一个新的属性,它是一个string类型:

private DateTime _fromDate;
public string FromDate
{
    get { return _fromDate.ToString(); }
    set { _fromDate = DateTime.Parse(value); }
}

尽管您需要 a) 对字符串的格式进行一些控制,并且 b) 对输入字符串进行一些安全检查,以确保它不会在不是有效日期时引发异常。

于 2012-05-25T08:55:06.563 回答
2

该属性的类型为DateTime; 您根本无法将字符串作为值传递,即使您打算将其转换为DateTime自己。

用更专业的术语来说,这个属性会导致你的类有一个方法

public DateTime get_FromDate(DateTime value)
{
    // your property setter code here
}

该方法接受一个DateTime参数,没有办法改变它。

如果您想提供一种方便的方法将字符串转换为 aDateTime给类的用户(可能是使用非平​​凡处理的用户),您可以将转换公开为类的方法。用户每次都必须明确调用它,但这就是生活。

于 2012-05-25T08:55:22.397 回答
2

您已经将参数作为 a 获取DateTime,因此无需解析它。

如果您真的坚持要解析它,请将其转换为字符串

set { _fromDate = DateTime.Parse(value.ToString()); }

但是如果你这样做,你会得到一个日期时间,将它转换为一个字符串,然后将它转换回一个日期时间,这是......好吧,不是很出色:)

于 2012-05-25T08:55:40.930 回答
1

不要打败一个 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;
        }
    }

显然你会想要创建额外的构造函数,并且可能有一个匹配的类型构造函数作为你的默认值。

于 2016-11-29T03:06:49.683 回答
0

你会得到编译器错误,因为DateTime.Parse(string s)它接受了一个string输入参数,但value它的类型是DateTime,它不能被隐式转换为string.

您不需要解析该值,因为它已经存在DateTime,因此您可以将代码更改为set { _fromDate = value; }

于 2012-05-25T09:00:28.090 回答
0

简单使用

private DateTime _fromDate;
public DateTime FromDate
    {
        get { return _fromDate; }
        set { _fromDate = value; }
    }

value将是 的,DateTime因为财产是 的DateTime。当有人分配此属性DateTime object时,它将进入value。在 Set 中,该值将分配给_fromDate

于 2012-05-25T09:03:41.443 回答