You need to enable JavaScript to run this app. C#如何根据输入行数动态拼接字符串并解决变量未赋值报错
优惠活动
大模型
产品
解决方案
定价
更多

C#如何根据输入行数动态拼接字符串并解决变量未赋值报错

报错原因

使用了未赋值的局部变量'MessageToSend'
你的代码仅覆盖了AmountOfLines为1、2的赋值分支,当输入为其他数值(3-10、非法值)时,MessageToSend没有被赋值就被后续代码调用,C#编译器对局部变量的明确赋值规则不允许这种情况,因此抛出错误。

实现方案选择

不管是if-else还是switch-case都不是最优解,你最多要处理10种分支,代码冗余度高,后续修改也麻烦,直接用内置方法实现即可,代码更简洁易维护。

最优实现代码

首先给MessageToSend设默认值兜底,再做范围校验,之后用Enumerable.Repeat+string.Join实现重复拼接:

// 先做输入范围校验,确保行数在1-10之间
int validLines = AmountOfLines switch
{
    < 1 => 1,
    > 10 => 10,
    _ => AmountOfLines
};
// 重复N次Message后用换行拼接
string MessageToSend = string.Join(Environment.NewLine, Enumerable.Repeat(Message, validLines));

如果你的项目运行环境是.NET 6及以上,还可以用更高效的string.Create实现:

int validLines = Math.Clamp(AmountOfLines, 1, 10);
int singleLength = Message.Length + Environment.NewLine.Length;
int totalLength = singleLength * validLines - Environment.NewLine.Length;
string MessageToSend = string.Create(totalLength, (Message, validLines), (span, state) =>
{
    var (msg, lines) = state;
    for (int i = 0; i < lines; i++)
    {
        msg.CopyTo(span);
        span = span.Slice(msg.Length);
        if (i != lines - 1)
        {
            Environment.NewLine.CopyTo(span);
            span = span.Slice(Environment.NewLine.Length);
        }
    }
});

分支实现的注意事项

如果确实要走if-else或switch分支,必须给MessageToSend设置初始默认值,或者覆盖所有可能的分支:

// 方法1:声明时给默认值兜底
string MessageToSend = string.Empty;
if(AmountOfLines == 1)
{
    MessageToSend = Message;
}
else if(AmountOfLines == 2)
{
    MessageToSend = Message + Environment.NewLine + Message;
}
// 其他分支补充...

// 方法2:用switch的default分支兜底
string MessageToSend = AmountOfLines switch
{
    1 => Message,
    2 => $"{Message}{Environment.NewLine}{Message}",
    // 其他case...
    _ => Message // 兜底分支,避免未赋值
};

内容的提问来源于stack exchange,提问作者Lets go yea

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 13:45:06