我怎样才能像在"""是Startdate为null
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);
}
答案 0 :(得分:7)
ternery operator的两边需要是同一类型。来自文档:
first_expression和second_expression的类型必须相同,或者从一种类型到另一种类型必须存在隐式转换。
因此,您只需将日期转换为字符串(请注意格式由您决定):
(StartDate == null ? "?" : StartDate.Value.ToString("dd-MM-yyyy"))
答案 1 :(得分:7)
C#6允许你在没有三元运算符的情况下编写它,如下所示:
StartDate?.ToString("dd-MM-yyyy") ?? "?"
仅当?.
不是ToString
时, StartDate
才会有条件地执行null
。空合并运算符??
将通过提供"?"
字符串作为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";
答案 2 :(得分:4)
您可以调整现有代码
(StartDate == null ? "?" : StartDate.ToString())
或利用Nullable<T>
.HasValue
(StartDate.HasValue ? StartDate.ToString() : "?")
关键是,?:
要求两种条件使用相同的类型。
答案 3 :(得分:0)
你可以使用IsNullOrEmpty()函数,它将覆盖null或空日期 (IsNullOrEmpty(StartDate)?“?”:StartDate.ToString(“dd-MM-yyyy”))