0

コード配列の値に常に「0」が含まれるのはなぜですか?

        static void Main(string[] args)
        {
            string Input = Console.ReadLine();
            char[] Number = new char[3];
            Util.SetNumber(Input,Number);
            foreach (char digit in Number)
            {
                Console.WriteLine(digit);
            }
            Console.ReadKey();            
        }

これはクラスです:

    class Util
    {
        public static void SetNumber(string Input,char[] Number)
        {            
            Number = Input.ToCharArray();                   
        }

    }

しかし、「foreach」部分を Util.cs に入れると、値が書き込まれます..

以前はありがとう、

4

3 に答える 3

7

これは、配列を埋めていないためです。メソッドでは、ローカル変数が保持する(配列への参照) を完全に新しい配列に置き換えています。そのような変更は、明らかにそのメソッドの外に留まることはできません。 Number

次のように使用Array.Copyまたは渡すことができます:Numberref

Array.Copy(Input.ToCharArray(), Number, 3);

また

public static void SetNumber(string Input, ref char[] Number)
{
    Number = Input.ToCharArray();
}

そして、次のように呼び出します。

Util.SetNumber(Input, ref Number);

ここでの別の(おそらくより良い)オプションは、 asoutの代わりに使用することです。パラメーターとして渡す変数を初期化する必要がないため、それを行う必要はなく、さらに初期化せずに使用して渡すことができます。そうは言っても、使用するときはメソッドで値を割り当てる必要あるため、それがどれほど複雑になるかによって、それが実現可能である場合と不可能である場合があります。refoutchar [] Number = new char[3];char [] Number;out

これは、 Jon SkeetによるC# でのパラメーター受け渡しに関する優れた記事です(このサイトで彼の回答を 1 つか 2 つ見たことがあるかもしれません)。

マイナーな注意事項: 意図的な決定かもしれませんが、変数名は、フィールド、メソッドへのパラメーター、およびローカル変数に名前を付ける必要があることを示す C# コードのガイドラインに従っていませんcamelCasePascalCaseタイプ、メソッド、およびプロパティ用に予約されています。

于 2013-06-03T06:10:18.283 に答える
0

Util クラスを完全に取り除くことができます

string input = Console.ReadLine();

foreach (var digit in input.ToCharArray())
{
        Console.WriteLine(digit);    
}

Console.ReadKey(); 
于 2013-06-03T07:12:26.377 に答える