【问题标题】:c# return functionc# 返回函数
【发布时间】:2013-04-03 16:01:29
【问题描述】:
private void button3_Click_1(object sender, EventArgs e)
{
    textBox2.Text = "$" + (textBox1.Text = string.Format(System.Globalization.CultureInfo.GetCultureInfo("us-US"), "{0:#,##0.00}", double.Parse(textBox1.Text)));

    string digits, temp;
    long numberVal;

    string[] powers = new string[] { "Thousand ", "Million " };
    string[] ones = new string[] { "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" };
    string[] tens = new string[] { "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" };
    string[] currency = new string[] { "Dollars" };
    string wordValue = "";

    if (numberVal == 0) 
        return "Nol";
    if (numberVal < 0)
    {
        wordValue = "negative ";
        numberVal = -numberVal;
    }

    long[] partStack = new long[] { 0, 0, 0, 0 };
    int partNdx = 0;

    while (numberVal > 0)
    {
        partStack[partNdx++] = numberVal % 1000;
        numberVal /= 1000;
    }

    for (int i = 3; i >= 0; i--)
    {
        long part = partStack[i];
        if (part >= 100)
        {
            wordValue += ones[part / 100 - 1] + " Ratus ";
            part %= 100;
        }

        if (part >= 20)
        {
            if ((part % 10) != 0) wordValue += tens[part / 10 - 2] +
               " " + ones[part % 10 - 1] + " ";
            else wordValue += tens[part / 10 - 2] + " ";
        }
        else if (part > 0) wordValue += ones[part - 1] + " ";

        if (part != 0 && i > 0) wordValue += powers[i - 1];
    }

    textBox3.Text = return wordValue;

}

我正在尝试将 long 类型的数字转换为字符串单词。

为什么我的函数返回错误,是我使用不正确还是其他原因?

【问题讨论】:

  • 你得到了什么?你在期待什么?
  • 简单的textBox3.Text = wordValue; 怎么样??
  • 请发布确切的错误信息。

标签: c# string textbox return


【解决方案1】:

在 C# 中,return关键字用于从函数返回值。在您的情况下,您没有返回任何内容,但您想为某个属性分配一个值,这是完全不同的。

删除 return 关键字。

编辑
似乎您在没有真正理解它的作用的情况下复制并粘贴了一些代码。您复制代码的函数将数字转换为其文本表示形式,并将该文本表示形式作为文本返回。

您现在尝试在事件处理程序中使用此代码,直接将结果分配给文本框。如果您将任何 return "..." 语句替换为

,则可行
{
    textbox3.Text = "...";
    return;
}

最干净的解决方案是将代码复制到一个函数中并正确使用它。


需要return关键字的函数示例:

string SayHello(string user)
{
    return "Hello " + user;
}

不返回值但可以使用return中断的方法示例:

void DoSomething()
{
    if (!myConditionIsMet)
        return;

    DoSomethingElse();
}

不能使用return关键字的作业示例:

string name = "Brad";
name = name + " Pitt";

【讨论】:

    【解决方案2】:
    textBox3.Text = return wordValue; 
    

    不是有效的 C# 代码。

    这样写:

     textBox3.Text = wordValue;
    

    并且没有返回,根据函数定义:void,没有任何返回。

    【讨论】:

      【解决方案3】:

      试试这个:

      //textBox3.Text = return wordValue;
      textBox3.Text = wordValue;
      

      【讨论】:

      • 它工作,但我应该用这个做什么:if (numberVal == 0) return "Nol";
      • 你做if (numberVal == 0) { textBox3.Text = "NOL"; return; }。虽然您从中复制代码的函数返回了数字字符串,但您现在尝试将其直接分配给文本框。这意味着:如果numberVal == 0 需要退出事件处理程序,而不是返回Nol,您需要将该文本分配给文本框。
      • 因为你的方法是“void”,所以这里的返回值就是idnore——一种bug
      • @duDE 否。从没有返回类型的方法返回值是错误的。
      • 是的,但是 OP 意味着它可以工作 - 这就是为什么我的意思是它是一种编译器的错误!
      【解决方案4】:

      这是不正确的 textBox3.Text = return wordValue;

      如下所示

      textBox3.Text = wordValue;

      而且由于函数是无效的,所以没有什么可以返回。

      【讨论】:

        【解决方案5】:

        您的方法,一个 button_click 事件,有一个方法签名,其中包括一个 void 返回类型。

        这意味着该方法不打算返回任何内容。

        同样,return 语句不能作为赋值语句的一部分(不能放在“=”右侧)。

        正如其他人所说,您只需删除 return 关键字即可获得所需的结果。在检查 numberval == 0

        之后,您还需要删除代码中更靠前的 return 语句

        需要返回的地方是其标头指示返回类型(void 以外的任何类型)的方法。在这些方法中,您在它自己的语句的开头使用return 来返回它后面的值或对象。

        例如:

        /* In a method somewhere */
        int foo = Bar();
        
        /* The Bar method */
        public int Bar()
        {
            /* Whatever code runs */
            return 3; //return an object or value whose type matches the type the method signiture says you return
        }
        

        【讨论】:

          猜你喜欢
          • 2015-10-31
          • 2015-10-01
          • 2014-12-05
          • 2016-08-28
          • 2012-06-04
          • 2012-09-26
          • 1970-01-01
          • 2015-12-28
          相关资源
          最近更新 更多