0
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 类型的数字转换为字符串单词。

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

4

5 回答 5

9

在 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";
于 2013-04-11T12:45:52.660 回答
3
textBox3.Text = return wordValue; 

不是有效的 C# 代码。

写一些类似的东西:

 textBox3.Text = wordValue;

并且没有返回,根据函数定义:void,没有什么可以返回。

于 2013-04-11T12:46:50.837 回答
2

尝试这个:

//textBox3.Text = return wordValue;
textBox3.Text = wordValue;
于 2013-04-11T12:46:31.897 回答
0

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

使其如下

textBox3.Text = wordValue;

并且由于该函数是无效的,因此没有什么可以返回。

于 2013-04-11T12:50:58.947 回答
0

您的方法 button_click 事件具有包含void返回类型的方法签名。

这意味着该方法不打算返回任何东西。

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

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

需要返回的地方是其标头指示返回类型(除 之外的任何内容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
}
于 2013-04-11T12:51:14.650 回答