2015-10-16 77 views
3

我該如何編寫「?是開始日期爲空寫「?」在一個字符串中,如果一個屬性爲空

public DateTime? StartDate { get; set; } 

public override string ToString() 
{ 
    return String.Format("Course {0} ({1} is an {2} course, will be given by {3}, starts on {4}, costs {5:0.00} and will have maximum {6} participants" 
     , Name 
     , CourseId 
     , CourseType 
     , Teacher 
     , (StartDate == null ? "?" : StartDate) 
     , Price 
     , MaximumParticipants); 
} 
+2

將其更改爲'(StartDate == null?「?」:StartDate.ToString())' – Rob

+0

三元語句在兩個操作數中都需要相同的類型。 –

回答

4

你可以調整你的現有代碼

(StartDate == null ? "?" : StartDate.ToString()) 

或利用Nullable<T>.HasValue

(StartDate.HasValue ? StartDate.ToString() : "?") 

問題是,?:要求兩種條件都是相同的類型。

7

ternery operator的兩側需要是相同的類型。從文檔:

first_expression和second_expression的類型必須相同,或者必須存在從一種類型到另一種類型的隱式轉換。

所以,你可以在你的約會只是轉換爲字符串(注意格式是由你):

(StartDate == null ? "?" : StartDate.Value.ToString("dd-MM-yyyy")) 
+0

Aah oke我看到了,因爲StartDate是DateTime和「?」是一個字符串 –

+0

'StartDate.ToString(「dd-MM-yyyy」)'不起作用。我需要:'StartDate.Value.ToString(「dd-MM-yyyy」)''。但爲什麼需要額外的格式? –

+0

@MartinMulder實際上它會工作。我把這個格式作爲例子,由OP決定如何顯示它。 – DavidG

7

C#6讓你寫這個沒有三元運算符,就像這樣:

StartDate?.ToString("dd-MM-yyyy") ?? "?"  

?.將有條件地執行ToString只有StartDatenull。空合併運算符??將通過提供"?"字符串來替代null值來完成作業。

您可以進一步去和插線,這樣的替換String.Format

return $"Course {Name} ({CourseId} is an {CourseType} course, will be given by {Teacher}, starts on {StartDate?.ToString("dd-MM-yyyy") ?? "?"}, costs {Price:0.00} and will have maximum {MaximumParticipants} participants"; 
0

你可以使用IsNullOrEmpty()函數,它會覆蓋null或空日期 (IsNullOrEmpty(起始日期)? 「?」: StartDate.ToString(「dd-MM-yyyy」))

相關問題