无法隐式转换类型’System.DateTime?’ 到’System.DateTime’。 存在显式转换

我想转换日期时间? todatetime但我收到此错误:

错误7无法隐式转换类型’System.DateTime?’ 到’System.DateTime’。 存在显式转换

这是我的代码:

public string ConvertToPersianToShow(DateTime? datetime) { DateTime dt; string date; dt = datetime; string year = Convert.ToString(persian_date.GetYear(dt)); string month = Convert.ToString(persian_date.GetMonth(dt)); string day = Convert.ToString(persian_date.GetDayOfMonth(dt)); if (month.Length == 1) { month = "0" + Convert.ToString(persian_date.GetMonth(dt)); } if (day.Length == 1) { day = "0" + Convert.ToString(persian_date.GetDayOfMonth(dt)); } //date = Convert.ToString(persian_date.GetYear(dt)) + "/" + Convert.ToString(persian_date.GetMonth(dt)) + "/" + //Convert.ToString(persian_date.GetDayOfMonth(dt)); date = year + "/" + month + "/" + day+"("+dt.Hour+":"+dt.Minute+")"; return date; } 

你有3个选择:

1)获取默认值

 dt = datetime??DateTime.Now; 

如果datetime为null,它将分配DateTime.Now (或您想要的任何其他值)

2)检查datetime是否包含值,如果不返回空字符串

 if(!datetime.HasValue) return ""; dt = datetime.Value; 

3)将方法的签名更改为

 public string ConvertToPersianToShow(DateTime datetime) 

这都是因为DateTime? 意味着它是可以为空的DateTime所以在将它分配给DateTime之前,你需要检查它是否包含值,然后才分配。

dtnullable你需要访问它的Value

 if (datetime.HasValue) dt = datetime.Value; 

重要的是要记住它可以是NULL 。 这就是nullablenullable struct具有HasValue属性的原因,该属性告诉您它是否为NULL

你也可以使用null-coalescing operator ?? 分配默认值

 dt = datetime ?? DateTime.Now; 

如果左侧的值为NULL则会在右侧分配值

问题是您将可空类型传递给非可空类型。

您可以执行以下任何解决方案:

A.声明你的dt为空

DateTime? dt = dateTime;

B.使用DateTime? datetime Value属性DateTime? datetime DateTime? datetime

DateTime dt = datetime.Value;

C.施展它

DateTime dt = (DateTime) datetime;

你应该使用datetime参数的.Value。 所有Nullable结构都有一个value属性,它返回对象的具体类型。 但是你必须事先检查它是否为null,否则你将收到运行时错误。

即:

 datetime.Value 

但要检查它是否有价值!

 if (datetime.HasValue) { // work with datetime.Value }