如何改进这个 C# 字符串形成片段?

问题描述 投票:0回答:1

我是一名初级开发人员,目前正在从事 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.";
}

输出正如我所期望的那样,但我只是在寻找一种更有效的方法来实现它,同时可能学习一些新的东西。感谢任何和所有建议。

c# logging string-function
1个回答
0
投票

您可以尝试 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(". ");
}
© www.soinside.com 2019 - 2024. All rights reserved.