我是一名初级开发人员,目前正在从事 C# 项目。我还有很多东西需要学习,所以我在这里寻找一些关于我的代码片段的建议。
我有一个执行多个流程和步骤的函数。我希望在单个字符串中记录每个步骤的执行情况,并将该字符串插入我的数据库中以供日常审查。下面的代码片段能够完成此任务,但就我个人而言,它有点碍眼,我确信必须有一种更有效的方法来完成此任务,但由于我缺乏深入的知识,所以什么也没想到。我想知道是否有人可以建议一个更好的替代方案来形成最终的“结果”字符串。
注意:我删除了原始代码片段中涉及的流程和功能,以专注于我希望改进的领域。重点纯粹在于形成“结果”字符串
if (ballotingIPOs.Count > 0)
{
string sBallotIPO = "Balloting IPO(s): ";
string sProcessTape = "Processed Tape for Share Issue Number(s): ";
string sNoTape = "No Tape found for Share Issue Number(s): ";
string tsBallotIPO = string.Empty;
string tsProcessTape = string.Empty;
string tsNoTape = string.Empty;
foreach (IPODetails ballotingIPO in ballotingIPOs)
{
tsBallotIPO += tsBallotIPO.Length > 0 ? $", {ballotingIPO.ShareIssueNumber}" : $"{ballotingIPO.ShareIssueNumber}";
if (ipoData.ipoDetails.ShareIssueNumber != null)
{
tsProcessTape += tsProcessTape.Length > 0 ? $", {ipoData.ipoDetails.ShareIssueNumber} (Tape{ipoData.ipoDetails.TapeNumber})" : $"{ipoData.ipoDetails.ShareIssueNumber} (Tape{ipoData.ipoDetails.TapeNumber})";
}
else
{
tsNoTape += tsNoTape.Length > 0 ? $", {ipoData.ipoDetails.ShareIssueNumber}" : $"{ipoData.ipoDetails.ShareIssueNumber}";
}
}
result += tsNoTape.Length > 0 ? $"{sBallotIPO}{tsBallotIPO}. {sProcessTape}{tsProcessTape}. {sNoTape}{tsNoTape}." : $"{sBallotIPO}{tsBallotIPO}. {sProcessTape}{tsProcessTape}.";
}
else
{
result += "No Balloting IPOs to process.";
}
输出正如我所期望的那样,但我只是在寻找一种更有效的方法来实现它,同时可能学习一些新的东西。感谢任何和所有建议。
您可以尝试 StringBuilder 和 LINQ,因为它们在处理大量数据方面更有效。使用StringBuilder可以避免在连接结果时重复创建字符串,使用LINQ的Select和Where可以避免使用循环的复杂性,例如下面的代码(由于不知道ballotingIPOs的类型,所以这里使用var):
var processedTapes = ballotingIPOs
.Where(ipo => ipo.ShareIssueNumber != null && ipo.TapeNumber != null)
.Select(ipo => $"{ipo.ShareIssueNumber} (Tape{ipo.TapeNumber})")
.ToList();
然后就可以通过了。 Any() 判断processedTapes是否为空(其中xxx是你自己的StringBuilder):
if (processedTapes.Any())
{
xxx.Append("Processed Tape for Share Issue Number(s): ");
xxx.Append(string.Join(", ", processedTapes));
xxx.Append(". ");
}