How can I create an optional DateTime parameter?

后端 未结 4 1052
悲哀的现实
悲哀的现实 2021-02-18 23:30

I have this function that returns a reference type. Now, this function has two optional parameters both of which are instances of the DateTime class. The function i

相关标签:
4条回答
  • 2021-02-18 23:55

    Btw, you don't have to use nullable datetime like all other answers says. You can do it with DateTime as well:

    public DateTime GetDate(
         DateTime start = default(DateTime), 
         DateTime end = default(DateTime))
    {
         start = start == default(DateTime) ? DateTime.MinValue : start;
         end = end == default(DateTime) ? DateTime.MinValue : end;
    }
    

    This is unlikely but it won't work as expected if you actually pass the default datetime value to your function.

    0 讨论(0)
  • 2021-02-19 00:00

    You can set the DateTime to be nullable and then convert to DateTime.Min if no parameter is provided:

    public DateTime GetDate(DateTime? start = null, DateTime? end = null) {
        var actualStart = start ?? DateTime.Min;
        var actualEnd = end ?? DateTime.Min;
    }
    
    0 讨论(0)
  • 2021-02-19 00:08

    The only way would be to do it like this (a bit more code, but it gives you optional args):

    public DateTime GetDate(DateTime? start = null, DateTime? end = null)
    {
        // Method body...
        if(start == null)
        {
          start = DateTime.MinValue;
        }
    
        //same for end
    }
    
    0 讨论(0)
  • 2021-02-19 00:12

    One workaround is to assign them like this:

    public DateTime GetDate(DateTime? start = null, DateTime? end = null){
        start = start ?? DateTime.MinValue;
        end = end ?? DateTime.MinValue;
    
        Console.WriteLine ("start: " + start);
        Console.WriteLine ("end: " + end);
        return DateTime.UtcNow;
    }
    

    Which can be used like this:

    void Main()
    {
        new Test().GetDate();
        new Test().GetDate(start: DateTime.UtcNow);
        new Test().GetDate(end: DateTime.UtcNow);
        new Test().GetDate(DateTime.UtcNow, DateTime.UtcNow);
    }
    

    And works just as expected:

    start: 1/01/0001 0:00:00
    end: 1/01/0001 0:00:00
    
    start: 8/08/2014 17:30:29
    end: 1/01/0001 0:00:00
    
    start: 1/01/0001 0:00:00
    end: 8/08/2014 17:30:29
    
    start: 8/08/2014 17:30:29
    end: 8/08/2014 17:30:29
    

    Note the named parameter to distinguish between the start and end value.

    0 讨论(0)
提交回复
热议问题