我正在尝试将输入数据的验证移至 get;set; 一个类结构。
public void PlotFiles()
{
List<DTVitem.item> dataitems;
DTVitem.item i;
DateTime.TryParse("2012/01/01", out i.dt);
DateTime.TryParse("04:04:04", out i.t);
int.TryParse("455", out i.v);
dataitems.Add(i);
}
该结构在一个单独的类中声明(可能没有必要):
public partial class DTVitem
{
public struct item
{
public DateTime dt;
public DateTime t;
public int v;
}
}
每次我设置DTVitem.item.dt
, DTVitem.item.t
, 或DTVitem.item.v
时,我希望它执行相关.TryParse()
来验证属性内容。
但是,当我尝试按如下方式使用 TryParse() 时(试图从 MSDN 中绕过这个示例):
public partial class DTVitem
{
private DateTime _datevalue;
public string dt
{
get { return _datevalue; }
set { DateTime.TryParse(value, out _datevalue) ;}
}
}
我收到错误消息_datevalue is a DateTime and cannot be converted to a string
。原因显然是返回路径必须返回dt
此实例中的类型 (a string
)。但是,我尝试了几种不同的方式来按摩它,但无法破解它。
在将值设置为结构实例的属性时,如何实现将string
值验证为 a 的目标?DateTime
正在使用set
我正在尝试的最佳方式吗?
我可以看到使用 get;set; 有很多价值。进行验证,并且真的很想了解它。
非常感谢,
马特
[编辑]
感谢下面的Jon Skeet指出了我的错误。
这是关于可变结构问题的另一个线程,另一个关于实例化结构的讨论。注意结构是值类型。
我相信他所指出的其余部分只是同意将结构埋得很远是没有必要的,我应该回顾一下我为什么要这样做。
[解决方案]
我考虑了以下一些建议并提出以下建议:
public partial class DTVitem
{
private DateTime _dtvalue, _tvalue;
private int _vvalue;
public string dt
{
get { return _dtvalue.ToString(); }
set { DateTime.TryParse(value, out _dtvalue); }
}
public string t
{
get { return _tvalue.ToString(); }
set { DateTime.TryParse(value, out _tvalue); }
}
public string v
{
get { return _vvalue.ToString(); }
set { int.TryParse(value, out _vvalue); }
}
}
在我的程序类中,我已经实例化并设置了以下内容:
DTVitem item = new DTVitem();
item.dt = "2012/01/01";
item.t = "04:04:04";
item.v = "455";
所以我选择不使用结构,而是使用类;或者真的是类的一个实例。