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 に答える
0

これは正しくありません textBox3.Text = return wordValue;

次のようにします

textBox3.Text = wordValue;

関数は void であるため、何も返されません。

于 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 に答える