无法隐式转换类型’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
之前,你需要检查它是否包含值,然后才分配。
dt
是nullable
你需要访问它的Value
if (datetime.HasValue) dt = datetime.Value;
重要的是要记住它可以是NULL
。 这就是nullable
为nullable
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 }