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

C#字符串变量赋值问题求助:随机选择工具代码调试

C#自定义随机选择工具的问题修复

核心问题分析

  • 变量作用域错误:item1、answer等变量声明在while循环内部,循环外的switch块无法访问这些变量,这是你无法赋值的核心原因。
  • if语句语法错误:if (item3 == null);末尾的分号会让if的逻辑体为空,导致后续的Running = false不受条件控制直接执行。另外Console.ReadLine()不会返回null(除非用户按下Ctrl+Z),用户输入"null"是字符串值,应该判断字符串内容而非null值。
  • 循环逻辑错误:当前代码输入完item2后就会强制退出循环,无法完成后续输入,也无法执行随机选择逻辑。

修正后的代码

using System;

internal class Program
{
    private static void Main(string[] args)
    {
        bool running = true;
        // 将变量声明移到while循环外部,确保循环外的代码可访问
        string item1 = "";
        string item2 = "";
        string item3 = "";
        string item4 = "";
        string item5 = "";
        string answer = "";

        while (running)
        {
            Console.Write("Enter item 1: ");
            item1 = Console.ReadLine() ?? "";
            Console.Write("Enter item 2: ");
            item2 = Console.ReadLine() ?? "";
            
            Console.Write("Enter item 3, or type 'null' to skip: ");
            string input3 = Console.ReadLine() ?? "";
            if (input3.Equals("null", StringComparison.OrdinalIgnoreCase))
            {
                item3 = "";
            }
            else
            {
                item3 = input3;
            }

            Console.Write("Enter item 4, or type 'null' to skip: ");
            string input4 = Console.ReadLine() ?? "";
            if (input4.Equals("null", StringComparison.OrdinalIgnoreCase))
            {
                item4 = "";
            }
            else
            {
                item4 = input4;
            }

            Console.Write("Enter item 5: ");
            item5 = Console.ReadLine() ?? "";

            // 完成输入后退出循环,执行随机选择
            running = false;
        }

        Random random = new Random();
        // 随机选择非空选项,避免选到空值
        switch (random.Next(1, 6))
        {
            case 1 when !string.IsNullOrEmpty(item1):
                answer = item1;
                break;
            case 2 when !string.IsNullOrEmpty(item2):
                answer = item2;
                break;
            case 3 when !string.IsNullOrEmpty(item3):
                answer = item3;
                break;
            case 4 when !string.IsNullOrEmpty(item4):
                answer = item4;
                break;
            case 5 when !string.IsNullOrEmpty(item5):
                answer = item5;
                break;
            default:
                answer = "没有可用的选项";
                break;
        }

        Console.WriteLine($"随机选择结果:{answer}");
    }
}

关键修改说明

  1. 调整变量声明位置到while循环外部,解决作用域访问问题。
  2. 修复if语句的分号错误,同时修正"null"输入的判断逻辑,忽略大小写提升用户体验。
  3. 用?? ""处理Console.ReadLine()可能返回的null值,避免空引用异常。
  4. 在switch分支中加入when条件,过滤空选项,避免无效选择。
  5. 增加结果输出逻辑,让工具功能完整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:25:23