C# 写“什么?”&引用;如果属性为null,则在字符串中
我如何像“?”这样写Startdate?Startdate为空C# 写“什么?”&引用;如果属性为null,则在字符串中,c#,datetime,string-formatting,tostring,C#,Datetime,String Formatting,Tostring,我如何像“?”这样写Startdate?Startdate为空 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} pa
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);
}
机器的两侧必须是同一类型。从文件中:
第一个_表达式和第二个_表达式的类型必须相同,或者必须存在从一种类型到另一种类型的隐式转换
因此,您可以简单地将日期转换为字符串(请注意,格式由您决定):
您可以调整现有代码
(StartDate == null ? "?" : StartDate.ToString())
或者利用Nullable
.HasValue
(StartDate.HasValue ? StartDate.ToString() : "?")
关键是,?:
要求两种条件的类型相同。C#6允许您在不使用三元运算符的情况下编写此代码,如下所示:
StartDate?.ToString("dd-MM-yyyy") ?? "?"
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";
?。
只有在StartDate
不是null
时才会有条件地执行ToString
。空合并运算符?
将通过提供“?”
字符串作为Null
值的替换来完成作业
您可以进一步使用插值字符串替换String.Format
,如下所示:
StartDate?.ToString("dd-MM-yyyy") ?? "?"
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";
您可以使用IsNullOrEmpty()函数,它将覆盖null或空日期
(IsNullOrEmpty(StartDate)?“?”:StartDate.ToString(“dd-MM-yyyy”)将其更改为
(StartDate==null?”?“:StartDate.ToString())
三元语句要求两个操作数的类型相同。我明白了,因为StartDate是日期时间,而“?”是字符串StartDate.ToString(“dd-MM-yyyy”)
将不起作用。我需要是:StartDate.Value.ToString(“dd-MM-yyyy”)
。但是为什么需要额外的格式呢?@MartinMulder实际上可以。作为一个例子,我放在那里的格式,由OP来选择如何显示它。因为您的返回类型是String,并且您正在您的返回语句中构建一个,所以ternery运算符的true和false值也应该都是String@KoenVanLooveren没错。我将编辑以添加澄清。