Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
日期时间+;长(小时)带C#_C#_Asp.net - Fatal编程技术网

日期时间+;长(小时)带C#

日期时间+;长(小时)带C#,c#,asp.net,C#,Asp.net,如何在C#中添加(DateTime?)和(long?),其中long是hrs。 DateTime中预期的结果 DateTime dt = DateTime.Now; long hours = 44; var dt2=dt.AddHours(hours); // uses an implicit cast from long to double // use "(double

如何在C#中添加(DateTime?)和(long?),其中long是hrs。 DateTime中预期的结果

        DateTime dt = DateTime.Now;
        long hours = 44;
        var dt2=dt.AddHours(hours);  // uses an implicit cast from long to double
                                     // use "(double)hours" for an explicit cast
**可空版本**

        DateTime? dt = DateTime.Now;
        long? hours = 44;
        if(hours==null) hours=0;
        DateTime? dt2 = (dt == null) ? null : (DateTime?) ((DateTime) dt).AddHours(hours);
**可为空版本(紧凑型)**

**可使用if语句为空**

        DateTime? dt = DateTime.Now;
        long? hours = 44;
        if(hours==null) hours=0;
        DateTime? dt2 = null;
        if (dt == null) 
            dt2 = (DateTime?) ((DateTime) dt).AddHours(hours);
        else 
            dt2 = null;

后续行动:

在其他答案中,我喜欢使用.Value(它看起来比cast更干净),但这并没有消除在hours参数中检查null的需要。顺便说一句:我尝试了另一个。值答案,得到了参数1:无法从'long'转换为'double'——也就是说,你不能忘记空检查

**可空版本**

        DateTime? dt = DateTime.Now;
        long? hours = 44;
        if(hours==null) hours=0;
        DateTime? dt2 = (dt == null) ? null : (DateTime?) ((DateTime) dt).AddHours(hours);
**可为空版本(紧凑型)**

**可使用if语句为空**

        DateTime? dt = DateTime.Now;
        long? hours = 44;
        if(hours==null) hours=0;
        DateTime? dt2 = null;
        if (dt == null) 
            dt2 = (DateTime?) ((DateTime) dt).AddHours(hours);
        else 
            dt2 = null;

后续行动:


在其他答案中,我喜欢使用.Value(它看起来比cast更干净),但这并没有消除在hours参数中检查null的需要。顺便说一句:我尝试了另一个。值回答,得到了参数1:无法从“long”转换为“double”——也就是说,你不能忘记空检查。

假设你的
日期时间
myDt
并且你的long是
myLong
,这应该可以:

myDt.AddHours((double)myLong);

假设您的
DateTime
myDt
并且您的long是
myLong
,这应该可以工作:

myDt.AddHours((double)myLong);
注意AddHours需要一个double,所以我们需要将它转换为double

long? hours = 1;
DateTime? d = new DateTime?();
d.Value.AddHours((double) hours);

请注意,AddHours需要一个双精度,因此我们需要将其转换为双精度。

您应该查看这些行

long? hours = 1;
DateTime? d = new DateTime?();
d.Value.AddHours((double) hours);
DateTime? dt2 = DateTime.Now;
long? lng = 5L;
if (dt2.HasValue)
   dt2 = dt2.Value.AddHours(lng ?? 0);

你应该在这些线上结账

DateTime? dt2 = DateTime.Now;
long? lng = 5L;
if (dt2.HasValue)
   dt2 = dt2.Value.AddHours(lng ?? 0);

可能不应该使用long?s:可能使用timespan?…DateTime.AddHours();不要做这项工作?有没有可能使用cultureInfo?可能不应该使用long?s:可能使用timespans?…DateTime.AddHours();不要做这项工作?cultureInfo有可能吗?首先,你不需要显式转换为双倍,直接通过
小时将很好;其次,您需要将
AddHours
调用的结果分配给某个对象:例如,
DateTime dt2=dt.AddHours(hours)
我相信这两种类型都是可以为null的。感谢LukeH和Vendetta指出了我以前的任务。注意,如果(hours==null)hours=0和
hours,你可以去掉
??0
使用
hours.GetValueOrDefault()
进行检查:@LukeH:可空长空的默认值不是吗?首先,您不需要显式转换为
double
,直接传递
hours
就可以了;其次,您需要将
AddHours
调用的结果分配给某个对象:例如,
DateTime dt2=dt.AddHours(hours)
我相信这两种类型都是可以为null的。感谢LukeH和Vendetta指出了我以前的任务。注意,如果(hours==null)hours=0和
hours,你可以去掉
??0
使用
hours.GetValueOrDefault()
进行检查:@LukeH:可为null的长空值不是默认值吗?