创建类时修改属性
本文关键字:属性 修改 创建 | 更新日期: 2023-09-27 18:28:58
我有很多控制器,它们从输入值stdo
中提取相同的值,如下面的控制器所示。
// Controller
public ActionResult GetValues(StatisticsDTO stdo)
{
var startDate = DateTime.Parse(stdo.Timespan.Substring(0, 10));
var endDate = DateTime.Parse(stdo.Timespan.Substring(12));
// Rest of controller actions ...
}
我想做的是在StatisticsDTO
对象的构造函数中完成这两个操作,然后将其添加到另一个属性中。
我已经尝试将行移动到两个不同的构造函数中,但是TimeSpan
值始终为null。这有可能吗?或者有其他方法可以重构它吗?
public class StatisticsDTO
{
public string Timespan { get; set; }
public string Country { get; set; }
public string AppName { get; set; }
public DateTime StartDate { get; set; } // New property
public DateTime EndDate { get; set; } // New property
public StatisticsDTO() {
this.StartDate = DateTime.Parse(Timespan.Substring(0, 10));
this.EndDate = DateTime.Parse(Timespan.Substring(12));
}
public StatisticsDTO(string Timespan, string Country, string AppName)
{
this.StartDate = DateTime.Parse(Timespan.Substring(0, 10));
this.EndDate = DateTime.Parse(Timespan.Substring(12));
}
}
我希望你能理解我在这里追求的是什么。
编辑
假设我使用来自具有数据变量的客户端的$ajax
调用来调用此操作
$.ajax({
type: "GET",
url: "/GetValues",
data: { Timespan: "01/01/01 - 02/02/02", Country: "US", AppName: "V1" }
});
这些参数被转换为StatisticsDTO
对象。我希望在创建stdo对象时在构造函数中设置StartDate
和EndDate
属性。
在为Timespan
属性分配任何值之前,此处的默认(即无参数)构造函数无法运行。删除它,其他构造函数应该可以正常工作。
然而,您似乎将此对象用作MVC参数,因此没有无参数构造函数是不起作用的。你可以这样做:
public DateTime StartDate
{
get { return DateTime.Parse(Timespan.Substring(0, 10)); }
}
public DateTime EndDate
{
get { return DateTime.Parse(Timespan.Substring(12)); }
}
或者,如果你打算稍后修改开始/结束日期属性,你可以这样做:
private string _timespan;
public string Timespan
{
get { return _timespan; }
set
{
_timespan = value;
StartDate = DateTime.Parse(Timespan.Substring(0, 10));
EndDate = DateTime.Parse(Timespan.Substring(12));
}
}