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

C#方法调用参数未识别(CS0103)问题求助

问题:调用Q1Present方法时出现CS0103编译错误

我为项目开发了一款统计用户得分的测验小游戏,用QuestionSheet对象存储题目,AnswerMethods类处理输入、验证答案和分数计算,代码如下:

namespace Quiz_for_bootcamp_project_1
{
    public class QuestionSheet
    {
       public string questions;
        public string answers;

        public QuestionSheet(string questions, string answers) 
        { 
        this.questions = questions;
        this.answers = answers;
        }

        public QuestionSheet Q1 = new QuestionSheet("What's 2+2?", "4");
        public QuestionSheet Q2 = new QuestionSheet("What's 5X3?", "15");
        public QuestionSheet Q3 = new QuestionSheet("What fruit is orange and round?", "ORANGE");
        public QuestionSheet Q4 = new QuestionSheet("What animal barks?", "DOG");
        public QuestionSheet Q5 = new QuestionSheet("What is the name of the IDE that this program was written in?", "C#");
    }

    public class AnswerMethods 
    {
        public String uAInput = Console.ReadLine();
        public static int userHighScore = 0;

        public static string UserAnswerIput() 
        { 
            String uAInput =Console.ReadLine();
    
            return uAInput;
        }

        public static string AnswerValidator(String uAInput, string answers)
        {
            if (uAInput == answers)
            {
                Console.WriteLine("Correct! 10 points for you!");
                AddPoints(userHighScore);
            }
            else
            {
                Console.WriteLine("Incorrect! -10 points.");
                RemovePoints(userHighScore);
            }
            return UserAnswerIput();
        }

        public static int AddPoints(int userHighScore)
        {
            int finalScore = userHighScore + 10;
            return finalScore;
        }

        public static int RemovePoints(int userHighScore)
        {
            int finalScore = userHighScore - 10;
            return finalScore;
        }
    }
}

注:使用类而非更简单的实现方式,是为了尽可能运用所学的C#知识

随后创建QuestionGameMethod1类实现游戏逻辑,代码如下:

namespace Quiz_for_bootcamp_project_1
{
    public class QuestionGameMethod1
    {
        public static void GameStart()
        {
            Console.WriteLine($"Please note: Write ALL answer in capital letters n/STARTING GAME...");
            Thread.Sleep(5000);
            Console.WriteLine("Game starts in 3...");
            Thread.Sleep(3000);
            Console.WriteLine("Game starts in 2...");
            Thread.Sleep(3000);
            Console.WriteLine("Game starts in 1...");
            Thread.Sleep(3000);
            Console.WriteLine("START!");

           Q1Present(QuestionSheet Q1, string uAInput, string answers);

        }
        public void Q1Present(QuestionSheet Q1, string uAInput, string answers)
        {
            Console.WriteLine(Q1.questions);
            UserAnswerIput();
            AnswerValidator(uAInput, answers);
            EndGame();
        }

        public static void EndGame() 
        { 
        Console.WriteLine($"game has ended! n/you got {userHighScore}!");
            if (userHighScore == 50) {
                Console.WriteLine("Great Job!"); 
                    }

            Console.WriteLine("if you want to try again, please restart the program");
            System.Environment.Exit(0);
        }
    }   
}

现在在GameStart方法中调用Q1Present时,出现编译错误CS0103,提示字符串参数无效或当前上下文中不存在,请求解决。


错误原因分析

出现CS0103的核心原因有几个:

  • 方法调用语法错误:调用Q1Present时,错误地在参数前加了类型声明(QuestionSheet Q1、string uAInput),这是方法定义的语法,不是调用的语法。
  • 未正确引用对象和变量:Q1是QuestionSheet类的实例字段,需要调整为静态字段才能全局访问;uAInput和answers在GameStart的上下文中未定义。
  • 静态与非静态方法冲突:GameStart是静态方法,Q1Present是非静态方法,不能直接调用,需要先实例化QuestionGameMethod1对象。
  • 跨类访问缺失:UserAnswerIput、AnswerValidator、userHighScore属于AnswerMethods类,需要通过类名或实例访问。
  • 分数逻辑无效:AddPoints和RemovePoints方法返回新分数,但没有赋值回userHighScore,导致分数不会更新。

修复后的完整代码

1. 调整QuestionSheet类,优化字段命名并将题目改为静态实例

namespace Quiz_for_bootcamp_project_1
{
    public class QuestionSheet
    {
        public string Question { get; set; }
        public string Answer { get; set; }

        public QuestionSheet(string question, string answer)
        {
            Question = question;
            Answer = answer;
        }

        // 改为静态字段,方便全局访问
        public static QuestionSheet Q1 = new QuestionSheet("What's 2+2?", "4");
        public static QuestionSheet Q2 = new QuestionSheet("What's 5X3?", "15");
        public static QuestionSheet Q3 = new QuestionSheet("What fruit is orange and round?", "ORANGE");
        public static QuestionSheet Q4 = new QuestionSheet("What animal barks?", "DOG");
        public static QuestionSheet Q5 = new QuestionSheet("What is the name of the IDE that this program was written in?", "VISUAL STUDIO");
    }
}

2. 修正AnswerMethods类的分数更新逻辑

namespace Quiz_for_bootcamp_project_1
{
    public static class AnswerMethods 
    {
        public static int UserScore = 0;

        public static string GetUserInput() 
        { 
            // 统一转为大写并去除空格,避免大小写/空格导致的错误判断
            return Console.ReadLine()?.Trim().ToUpperInvariant() ?? string.Empty;
        }

        public static void ValidateAnswer(string userInput, string correctAnswer)
        {
            if (userInput == correctAnswer)
            {
                Console.WriteLine("Correct! 10 points for you!");
                AddPoints();
            }
            else
            {
                Console.WriteLine($"Incorrect! -10 points. The correct answer is: {correctAnswer}");
                RemovePoints();
            }
        }

        public static void AddPoints()
        {
            UserScore += 10;
        }

        public static void RemovePoints()
        {
            UserScore -= 10;
        }
    }
}

3. 修正QuestionGameMethod1类的调用逻辑

using System.Threading;

namespace Quiz_for_bootcamp_project_1
{
    public class QuestionGameMethod1
    {
        public static void GameStart()
        {
            Console.WriteLine("Please note: Write ALL answers in capital letters\nSTARTING GAME...");
            Thread.Sleep(2000);
            Console.WriteLine("Game starts in 3...");
            Thread.Sleep(1000);
            Console.WriteLine("Game starts in 2...");
            Thread.Sleep(1000);
            Console.WriteLine("Game starts in 1...");
            Thread.Sleep(1000);
            Console.WriteLine("START!");

            // 实例化当前类,调用非静态方法
            var game = new QuestionGameMethod1();
            game.PresentQuestion(QuestionSheet.Q1);
        }

        public void PresentQuestion(QuestionSheet question)
        {
            Console.WriteLine(question.Question);
            string userInput = AnswerMethods.GetUserInput();
            AnswerMethods.ValidateAnswer(userInput, question.Answer);
            EndGame();
        }

        public static void EndGame() 
        { 
            Console.WriteLine($"Game has ended!\nYou got {AnswerMethods.UserScore} points!");
            if (AnswerMethods.UserScore == 50) 
            {
                Console.WriteLine("Great Job!"); 
            }
            else if (AnswerMethods.UserScore > 0)
            {
                Console.WriteLine("Nice try!");
            }

            Console.WriteLine("If you want to try again, please restart the program");
            System.Environment.Exit(0);
        }
    }   
}

关键修复点说明
  • 修正方法调用语法:调用方法时直接传入已定义的对象(如QuestionSheet.Q1),不再添加类型声明。
  • 静态与非静态处理:静态方法GameStart通过实例化QuestionGameMethod1来调用非静态的PresentQuestion。
  • 跨类访问规范:所有AnswerMethods的成员都通过AnswerMethods.XXX访问,确保上下文存在。
  • 分数逻辑修复:AddPoints和RemovePoints直接修改静态的UserScore字段,确保分数正确更新。
  • 用户输入优化:统一将输入转为大写并去除空格,避免不必要的错误判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 13:35:00