46

に変換しようとしDateTime?DateTimeいますが、次のエラーが発生します。

エラー 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;
}
4

4 に答える 4

60

次の 3 つのオプションがあります。

1) デフォルト値を取得

dt = datetime??DateTime.Now;

nullDateTime.Nowの場合、(または必要な他の値)を割り当てますdatetime

2)datetimeに値が含まれているかどうかを確認し、そうでない場合は空の文字列を返します

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

3) メソッドの署名を次のように変更します。

public string ConvertToPersianToShow(DateTime  datetime)

これはすべて、DateTime?null 可能であることを意味するDateTimeため、割り当てる前に、DateTime値が含まれているかどうかを確認してから割り当てる必要があるためです。

于 2013-11-14T08:38:46.563 に答える
6

問題は、 null 許容型を null 非許容型に渡していることです。

次の解決策のいずれかを実行できます。

A. dtnullable として宣言する

DateTime? dt = dateTime;

B.Valueの使用プロパティDateTime? datetime

DateTime dt = datetime.Value;

C. キャストする

DateTime dt = (DateTime) datetime;

于 2016-04-20T07:35:29.250 に答える