2013-04-11 117 views
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; 

} 

我想将一个数字与长类型转换为字符串单词。c#返回功能

为什么我的函数返回一个错误,我没有正确使用它或其他东西?

+0

你想说什么?你在期待什么? – 2013-04-11 12:45:44

+0

简单地说'textBox3.Text = wordValue;'? – Mark 2013-04-11 12:45:49

+0

请发布确切的错误消息。 – Aaron 2013-04-11 12:45:54

回答

10

在C#中,return关键字用于从函数返回值。在你的情况下,你没有返回任何东西,但是你想为某个属性赋值,这是完全不同的。

删除return关键字。

编辑
看来你复制粘贴&一些代码,并没有真正理解它做什么。您将代码从一个数字转换为其文本表示并将该文本表示形式返回为文本的功能。

您现在尝试在事件处理程序中使用此代码,直接将结果分配给文本框。这样的作品,如果你通过

{ 
    textbox3.Text = "..."; 
    return; 
} 

更换任何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; 
textBox3.Text = wordValue; 
+0

它的工作,但我应该这样做︰if(numberVal == 0)return“Nol”; – 2013-04-11 12:49:14

+0

你做'if(numberVal == 0){textBox3.Text =“NOL”;返回; }'。当您复制代码的功能返回数字字符串时,您现在尝试将其直接分配给文本框。这意味着:如果'numberVal == 0'需要退出事件处理程序,而不是返回'Nol',则需要将该文本分配给文本框。 – 2013-04-11 12:49:58

+0

由于你的方法是“无效的”,返回值将仅仅是idnore在这里 - 一种错误 – duDE 2013-04-11 12:50:46

3
textBox3.Text = return wordValue; 

是无效的C#代码。

写类似:

textBox3.Text = wordValue; 

,没有回报,accoridng函数定义:void,没有什么可以回报。

0

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

使其如下

textBox3.Text = wordValue;

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

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 
}