用可空值连接多个字符串

本文关键字:字符串 连接 空值 | 更新日期: 2023-09-27 18:13:50

我有一个消息框显示一些文本和数据(如果存在)在数据库中。当前问题正在尝试显示null并尝试转换为ShortDate。我采取了两种方法,但没有一种能达到我的目的。

第一种方法在字符串中使用三元连接,但它的行为非常奇怪。

DialogResult DuplicateMessage = MessageBox.Show("A contact name " + DuplicateName.Forename + " " + DuplicateName.Surname + " already exists within the System."
                            + "'n Existing Client:  " + DuplicateName.Forename + " " + DuplicateName.Surname
                            + "'n Date of Birth:  " +  DuplicateName.DOB != null ? Convert.ToDateTime(DuplicateName.DOB).ToString("yyyy-mm-dd") : " ",  
                            ,"Possible Duplicate Client", MessageBoxButtons.YesNo);

current消息框只显示换行符和出生日期。甚至连"出生日期"这句话都没有

如果我去掉三级和转换,只剩下

DialogResult DuplicateMessage = MessageBox.Show("A contact name " + DuplicateName.Forename + " " + DuplicateName.Surname + " already exists within the System."
                            + "'n Existing Client:  " + DuplicateName.Forename + " " + DuplicateName.Surname
                            + "'n Date of Birth:  " +  DuplicateName.DOB
                            ,"Possible Duplicate Client", MessageBoxButtons.YesNo);

这工作,显示一切。唯一的问题是出生日期的格式不对。我想知道如何使它的日期是短日期格式,并将显示一切。

'DuplicateName'的所有属性都是空的,

用可空值连接多个字符串

我怀疑这是使用条件运算符的运算符优先级的问题。它可能包括字符串连接作为被测试条件的一部分,而不是作为结果的一部分。可以显式地将该操作符的元素用圆括号括起来,以标识哪些字符串属于其中,哪些不属于其中:

"'n Date of Birth:  " +  (DuplicateName.DOB != null ? Convert.ToDateTime(DuplicateName.DOB).ToString("yyyy-mm-dd") : " ")

另外,如果DOBDateTime?,那么你可以简化你的代码:

"'n Date of Birth:  " +  (DuplicateName.DOB.HasValue ? DuplicateName.DOB.Value.ToString("yyyy-mm-dd") : " ")

没有必要在Nullable<T>类型上使用Convert,您可以更容易(和安全)地使用HasValueValue属性。

您可以使用另一对括号来修复它:

(DuplicateName.DOB != null ? Convert.ToDateTime(DuplicateName.DOB))

在第一种情况下,您将一个大字符串连接在一起(因为您没有使用任何括号),然后对null进行测试。它相当于这个:

var stringToTest = "A contact name " + DuplicateName.Forename + " " + DuplicateName.Surname + " already exists within the System."
                        + "'n Existing Client:  " + DuplicateName.Forename + " " + DuplicateName.Surname
                        + "'n Date of Birth:  " +  DuplicateName.DOB;

DialogResult DuplicateMessage =
    MessageBox.Show(stringToTest != null ? Convert.ToDateTime(DuplicateName.DOB).ToString("yyyy-mm-dd") : " ",  
                    ,"Possible Duplicate Client", MessageBoxButtons.YesNo);