2017-12-01 3 views
0

は、私はとのトラブルのビットを持っていたコードのブロックです:メソッドが機能しませんか?ここ

using System; 
namespace TestProgram { 
    class Test { 
     static void Main() { 
      int number = 10; 
      MultiplyByTen(number); 
      Console.WriteLine(number); 
      Console.ReadKey(true); 
     } 
     static public void MultiplyByTen(int num) { 
      num *= 10; 
     } 
    } 
} 

私はこのコードのブロックを実行すると、私が代わりに100の出力として10を得た私の質問は:なぜこれがありません起こって、どのようにそれを解決するのですか? 助けてくれてありがとう。

+0

は、なぜあなたはMultiplyByTenは 'number'に影響思うだろうか?値を 'num'にセーブします。コードには、初期化子以外の 'number'への代入が含まれていません。 –

+0

https://meta.stackoverflow.com/questions/311829/why-cant-i-mark-my-title-as-solved –

答えて

3

問題は、変数の数は、値がコピーされMultiplyByTen方法と、それは実際にはコピーなので、内部で変更している変数に入ったときに、元が変更されなかったことです。
ではなく、これを試してみてください:

public static void MultiplyByTen(ref int num) 
{ 
    num *= 10; 
} 

しかし、あなたにもREFキーワードでそれを呼び出す必要があります覚えておいてください。 Passing Objects By Reference or Value in C#

+0

私はあなたの答えが私のものよりも好きです。 – IRGeekSauce

1

戻り値を関数に戻す必要があります。戻り値を数値に代入する必要があります。

static void Main() 
    { 
     int number = 10; 
     number = MultiplyByTen(number); 
     Console.WriteLine(number); 
     Console.ReadKey(true); 
    } 
    static public int MultiplyByTen(int num) 
    { 
     return num *= 10; 
    } 
1

をあなたの実装を使用して::

static void Main() 
{ 
    int number = 10; 
    MultiplyByTen(ref number);//Notice the ref keyword here 
    Console.WriteLine(number); 
    Console.ReadKey(true); 
} 

また、私はこれをチェックすることをお勧めいたします

using System; 
namespace TestProgram { 
    class Test { 
     static void Main() { 
      int number = 10; 
      //MultiplyByTen(number); 
      //Console.WriteLine(number); 
      Console.WriteLine(MultiplyByTen(number)); 
      Console.ReadKey(true); 
     } 
     static public int MultiplyByTen(int num) { 
      return num *= 10; 
     } 
    } 
} 
関連する問題