gpt4 book ai didi

c# - 得到;设置;使用 DateTime 来验证 .TryParse?

转载 作者:太空宇宙 更新时间:2023-11-03 20:18:47 24 4
gpt4 key购买 nike

我正在尝试将输入数据的验证移至 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.dtDTVitem.item.t,或者DTVitem.item.v,我都希望它执行相关的 .TryParse() 来验证属性内容。

但是,当我尝试按如下方式使用 TryParse() 时(试图绕过 this example from MSDN ):

public partial class DTVitem
{
private DateTime _datevalue;

public string dt
{
get { return _datevalue; }
set { DateTime.TryParse(value, out _datevalue) ;}
}
}

我收到错误消息:_datevalue 是 DateTime,无法转换为字符串。原因显然是返回路径必须在这个实例中返回dt 的类型(一个string)。然而,我已经尝试用几种不同的方式来解决这个问题,但我无法破解它。

当将 string 值设置为结构实例的属性时,如何实现将其验证为 DateTime 的目标?

我尝试使用 set 是最好的方法吗?

我可以看到使用 get;set; 有很多值(value);用于验证,并且真的很想了解它。

非常感谢,

马特

[编辑]

感谢Jon Skeet下面指出我的方法的错误。

Here's another thread on problems with mutable structs , and another speaking about instantiating a struct .备注structs are value types .

我相信他指出的其余内容只是同意将结构埋在很远的地方是不必要的,我应该回顾一下我为什么要这样做。

[解决方案]

我考虑了下面的一些建议并提出了以下建议:

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";

所以我选择不使用结构体,而是使用类;或者实际上是该类的一个实例。

最佳答案

一个属性只能有一种类型。如果你希望属性是字符串类型,那么你可以这样实现:

public partial class DTVitem
{
private DateTime _datevalue;

public string dt
{
get { return _datevalue.ToString(); }
set { DateTime.TryParse(value, out _datevalue) ;}
}
}

但是,使用 TryParse() 意味着如果 DateTime 无效,setter 将不会抛出异常。如果您希望它执行此操作,请改用 DateTime.Parse()。

关于c# - 得到;设置;使用 DateTime 来验证 .TryParse?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14967731/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com