You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#拼接ProtocolNumber与CreationDate参数的最优实现及问题修复咨询

实现问题排查与最优方案

现有代码问题解答

1. 两次调用CreationDate.ToString()是否合理?

完全不合理。DateTime是值类型,非可空场景下调用ToString()永远不会返回空,你原有代码里的空值判断逻辑完全无效;多次调用还会产生不必要的冗余,要是两次用的格式不一致还会出现输出异常。

2. 多数据类型场景用ArrayList是否更合适?

完全不适合。ArrayList是.NET Framework早期的非泛型集合,存储不同类型数据会产生装箱拆箱开销,且类型不安全。你最终所有内容都要转为字符串输出,直接用List<string>就可以满足需求,没必要用已经被淘汰的ArrayList。

3. 第二段代码拼接异常的原因

  • 三目运算符逻辑写反:!string.IsNullOrEmpty(this.TaskReport.ProtocolNumber) ? "" : this.TaskReport.ProtocolNumber + "&nbsp;" 这段的意思是协议号有值时返回空字符串,没值时才返回协议号,和你的需求完全相反
  • 日期判断逻辑完全错误:CreationDate.ToString("yy-MM-dd") != "&nbsp;" 永远为真,日期转字符串不可能输出&nbsp;
  • 完全没有把日期字符串拼入结果,自然只会偶尔出现协议号、看不到日期

最优实现方案

先统一处理两个字段的有效值,仅保留非空内容再拼接,完全避免多余分隔符、冗余调用的问题:

// 提前处理两个字段的有效值,ToString仅调用一次
string validProtocol = string.IsNullOrWhiteSpace(this.TaskReport.ProtocolNumber) 
    ? null 
    : this.TaskReport.ProtocolNumber.Trim();

string validDate = null;
// 如果CreationDate是可空类型DateTime?,把判断条件换成this.TaskReport.CreationDate.HasValue即可
if (this.TaskReport.CreationDate != default(DateTime))
{
    // 按你需要的日期格式统一转换
    validDate = this.TaskReport.CreationDate.ToString("dd.MM.yyyy");
}

// 仅收集非空的内容
var validParts = new List<string>();
if (validProtocol != null) validParts.Add(validProtocol);
if (validDate != null) validParts.Add(validDate);

// 拼接单条内容,空内容默认返回&nbsp;
string relatedTaskHTML = validParts.Count == 0 
    ? "&nbsp;" 
    : string.Join(" ", validParts);

// 如果是多组TaskReport需要按日期倒序拼接,用下面的逻辑即可:
// var relatedTaskHTML = string.Join(", ", taskReportList
//     .OrderByDescending(report => report.CreationDate)
//     .Select(report => 
//     {
//         var p = string.IsNullOrWhiteSpace(report.ProtocolNumber) ? null : report.ProtocolNumber.Trim();
//         var d = report.CreationDate != default(DateTime) ? report.CreationDate.ToString("dd.MM.yyyy") : null;
//         return string.Join(" ", new[] {p, d}.Where(x => x != null));
//     })
//     .Where(item => !string.IsNullOrEmpty(item)));

consultationProtocol = consultationProtocol.Replace("{{ProtocolNumber}}", relatedTaskHTML);

内容的提问来源于stack exchange,提问作者user15060642

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:45:04