写"?"如果属性为null,则为字符串

时间:2015-10-16 09:32:35

标签: c# datetime string-formatting tostring

我怎样才能像在"""是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);
}

4 个答案:

答案 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”))