2015-10-16 101 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”))

相关问题