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

34 c# linq

我想转换日期时间?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;
}
Run Code Online (Sandbox Code Playgroud)

Kam*_*ski 43

你有3个选择:

1)获取默认值

dt = datetime??DateTime.Now;
Run Code Online (Sandbox Code Playgroud)

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

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

if(!datetime.HasValue) return "";
dt = datetime.Value;
Run Code Online (Sandbox Code Playgroud)

3)将方法的签名更改为

public string ConvertToPersianToShow(DateTime  datetime)
Run Code Online (Sandbox Code Playgroud)

这一切都是因为DateTime?它意味着它可以为空,DateTime所以在分配它之前DateTime需要检查它是否包含值,然后再分配.


Dav*_*ton 20

dtnullable你需要访问它的Value

if (datetime.HasValue)
    dt = datetime.Value;
Run Code Online (Sandbox Code Playgroud)

重要的是要记住它可以NULL.这就是为什么nullablestruct具有HasValue告诉你它是否存在的属性NULL.

您还可以使用它来指定默认值null-coalescing operator ??

dt = datetime ?? DateTime.Now;
Run Code Online (Sandbox Code Playgroud)

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


dr.*_*row 6

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

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

A. 声明你dt为可空

DateTime? dt = dateTime;

B. 使用Value属性DateTime? datetime

DateTime dt = datetime.Value;

C. 投射

DateTime dt = (DateTime) datetime;