创建类时修改属性

本文关键字:属性 修改 创建 | 更新日期: 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对象时在构造函数中设置StartDateEndDate属性。

创建类时修改属性

在为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));
    }
}