【问题标题】:Error: returns void, a return keyword must not be followed by an object expression错误:返回 void,return 关键字后面不能跟对象表达式
【发布时间】:2012-10-11 15:44:58
【问题描述】:
    private void QuestionAnswer_Load(object sender, EventArgs e)
    {

        txtQuestion.Enabled = false;
        txtQuestion.BackColor = Color.White;
        grpMultipleChoice.Enabled = false;
        grpSingleChoice.Enabled = false;

        btnCheckAnswer.Enabled = false;
        btnNext.Enabled = false;
        btnQuit.Enabled = false;

        //force student to enter registration details
        if (txtStudentName.Text == "" && txtStudentNumber.Text == "" && txtModuleNumber.Text == "")
        {
            btnStart.Enabled = false;
            MessageBox.Show("You must enter your registration details at the upper right corner");
        }

        //declare a list
        lstNumbers = new ArrayList();

        //create a random number generator
        Random rndNumber = new Random();

        //generate 70 random numbers
        //int number = (int)(rndNumber.NextDouble() * 69) + 1;

        //lstNumbers.Add(number);
        ///use this counter to loop whenever a number is generated
        int count = 0;
        int maximumNumber = 69;

        ///disable answer button 
        btnCheckAnswer.Enabled = false;
        do
        {

            int number = (int)(rndNumber.NextDouble() * maximumNumber) + 1;
            lstNumbers.Add(number);
            if (!lstNumbers.Contains(number))
            {
                lstNumbers.Add(number);
            }
            count++;

        } while (count <= 15 * 70);//
        btnCheckAnswer_Click(sender, e);
        return lstNumbers;//returns once list is built
     }

说明: 我创建了一个数组列表,允许我在 1-70 之间随机生成,但注意到 我的数字有些重复。为了防止这种情况,我注意到我得到了一个 错误信息如下:

错误 1 ​​由于 'wwTestAppV1.GenKnow.QuestionAnswer_Load(object, System.EventArgs)' 返回 void,return 关键字后面不能跟对象表达式

我已尽我所能解决这个问题。当我删除它时程序运行良好 语句,但显示重复值。你能帮忙吗?

【问题讨论】:

  • 你的意思是:返回 lstNumbers?在返回时显示曲线之前我已经尝试过了。
  • 除非您使用 Visual Studio 2003 和 C# 1 进行编程,否则您不应该使用 ArrayList。使用 System.Collections.Generic 中的 List
  • 我想补充一下 private void QuestionAnswer_Load(object sender, EventArgs e) 是它所属的方法。我什至尝试将 void 更改为字符串,这样我就可以使用 To String() 返回,但它仍然不起作用
  • 它在 Visual Studio 2012 @ Anthony 上
  • 已经说过,通过使用'void',你本质上是在说你的函数不会返回任何东西。您需要指定要返回的对象的确切类型。 (对不起,我之前的评论是 c++ ......所以我删除了它)。

标签: c# return


【解决方案1】:

你的方法签名是:

private void QuestionAnswer_Load(object sender, EventArgs e)

返回类型void 表示您不能/不打算返回任何东西。但是,在底部,您有:

return lstNumbers;//returns once list is built

你要退货了!编译器抱怨您告诉它的指令有冲突。要么将返回类型更改为ArrayList,要么不返回任何内容。

话虽如此,可以对代码进行一些改进以使其更具可读性,这也将帮助您破译问题。考虑将您的代码提交给https://codereview.stackexchange.com/

【讨论】:

  • 对。因此,如果您想保持返回的对象未定义,请将 private void 更改为 private yourobject 或 private T。
  • 听起来他对编程很陌生。我不建议他现在就开始编写泛型方法。
  • 当我将方法更改为私有字符串 QuestionAnswer_load(...., iget error..Error 1 'string wwTestAppV1.GenKnow.QuestionAnswer_Load(object, System.EventArgs)' 的返回类型错误跨度>
  • @annoying_squid;我的对象是 lstNumbers 对吗?它假设代表列表
  • 1stNumbers 是您的类型 ArrayList 的一个实例。尝试私有 ArrayList QuestionAnswer_Load .. 代替。您指定类型而不是实例的名称。编译器不会理解特定的名称。
猜你喜欢
  • 1970-01-01
  • 2013-05-03
  • 1970-01-01
  • 1970-01-01
  • 2020-02-10
  • 2016-09-26
  • 2012-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多