如何简化含可选MiddleName的姓名拼接生成Url的逻辑?
简化方案建议
方案1:利用列表收集有效部分再拼接(最易维护)
先封装一个格式化名字的辅助方法,避免重复写Replace和ToLower,然后把非空的名字部分加入列表,最后用string.Join拼接,逻辑清晰且扩展性强(后续加更多可选字段也方便):
// 辅助方法,提取重复的格式化逻辑 private string FormatNameSegment(string name) { return name.Replace(" ", "-").ToLower(); } // 生成Url的逻辑 var nameSegments = new List<string> { FormatNameSegment(newContributor.FirstName), FormatNameSegment(newContributor.LastName) }; // 中间名非空时插入到列表中间 if (!string.IsNullOrEmpty(newContributor.MiddleName)) { nameSegments.Insert(1, FormatNameSegment(newContributor.MiddleName)); } newContributor.Url = string.Join("-", nameSegments);
方案2:三元运算符简化分支逻辑
如果不想用列表,也可以用三元运算符直接拼接,同样先封装格式化方法减少重复:
private string FormatNameSegment(string name) { return name.Replace(" ", "-").ToLower(); } var firstName = FormatNameSegment(newContributor.FirstName); var lastName = FormatNameSegment(newContributor.LastName); var middleNamePart = string.IsNullOrEmpty(newContributor.MiddleName) ? "" : $"{FormatNameSegment(newContributor.MiddleName)}-"; newContributor.Url = $"{firstName}-{middleNamePart}{lastName}";
方案3:LINQ一行式(简洁但可读性稍弱)
如果喜欢更紧凑的写法,可以用LINQ过滤空值后拼接:
newContributor.Url = string.Join("-", new[] { newContributor.FirstName, newContributor.MiddleName, newContributor.LastName } .Where(n => !string.IsNullOrEmpty(n)) .Select(n => n.Replace(" ", "-").ToLower()) );
这个方案直接把三个名字放入数组,过滤掉空的中间名,再统一格式化后拼接,代码量最少,适合逻辑简单的场景。
内容的提问来源于stack exchange,提问作者Darkmatter5
相关产品推荐
相关产品推荐

