2012-05-25 52 views
0

我试图解析一个字符串的DateTime对象。没有问题:-) 我的问题来了,当我尝试直接在属性设置方法中做。试图解析字符串日期时间属性(C#)

我想我能做到这一点:

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

但我得到这个错误:

“参数1:无法从 'System.DateTime的' 到 '串' 转换”

不任何人都知道如何做到这一点,如果可以做到的话?

+0

你有“价值”的一个例子 – CatchingMonkey

+0

值类型的'DateTime'不呢?键入'string'。 –

回答

0

简单使用

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

value将是DateTime的属性DateTime。当有人分配这个属性DateTime object它将在value去。在设置该值将被分配到_fromDate

+0

我正试图将字符串生成DateTime分析器到属性中。 但最后使用XmlConvert.ToDateTime来预分析解析。 –

3

_fromDate的类型DateTime

DateTime.Parse需要string并返回DateTime

您传递value这已经是一个DateTime存在的DateTimestring的隐式转换。

如果您想直接解析stringDateTime,那么你就需要一个新的属性,它是一个string类型:

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

虽然你将需要一)有超过的格式一些控制字符串和b)对输入字符串进行一些安全检查,以确保它不会在有效日期时引发异常。

2

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

在更多的技术术语,有一个方法

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

该方法采用DateTime参数,也没有办法改变这个属性会导致你的类。

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

2

您已经将参数设置为DateTime,因此无需对其进行解析。

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

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

但是,如果你这样做,你会得到一个日期时间,将其转换为字符串,并将其转换回日期时间,这是......好吧,不艳:)

0

你让编译器错误,因为DateTime.Parse(string s)需要string输入参数,但valueDateTime类型,不能被隐式转换为string的。

你并不需要分析的价值,因为它已经DateTime,所以你可以改变你的代码set { _fromDate = value; }

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属性是空的,所以我不得不创建一个方法(pulled from 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; 
     } 
    } 

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