-4

あるクラスのループの値を別のクラスに使用しようとしていますが、どうすればよいですか。私を助けてください..

       while (!sStreamReader.EndOfStream)
            {
                string sLine = sStreamReader.ReadLine();
                // make sure we have something to work with
                if (String.IsNullOrEmpty(sLine)) continue;

                string[] cols = sLine.Split(',');
                // make sure we have the minimum number of columns to process
                if (cols.Length > 4)
                {
                    double a = Convert.ToDouble(cols[1]);
                    Console.Write(a);
                    int b = Convert.ToInt32(cols[3]);
                    Console.WriteLine(b);
                    Console.WriteLine();
                }
            }

a と b の値を別のクラスで使用しようとしています。このループは別のクラスです。

4

3 に答える 3

0

そのクラスで何をしたいかによります。私が見ているように、これにはたくさんの解決策があります。あなたのクラスにすべてのaとbが欲しいですか?それらを 2 つのリストまたは類似のものに保存するだけです。次に、それらをクラス コンストラクターまたはメソッドに送信します。例 :

    var listOfAs = new List<double>();
        var listOfBs = new List<int>();
        while (!sStreamReader.EndOfStream)
        {
           string sLine = sStreamReader.ReadLine();
           // make sure we have something to work with
           if (String.IsNullOrEmpty(sLine)) continue;
           string[] cols = sLine.Split(',');
           // make sure we have the minimum number of columns to process
           if (cols.Length > 4)
           {
               double a = Convert.ToDouble(cols[1]);
               listOfAs.Add(a);

               int b = Convert.ToInt32(cols[3]);
               listOfBs.Add(b);
           }
        }
//Here you can use all As and Bs and send them to the other class
MyClass.DoSomething(listOfAs,listOfBs);

a と b foreach ケースだけが必要ですか? それらをクラス コンストラクターまたはメソッドに直接送信し、ループ内で直接操作するだけです。これは、cols.length > 4 に一致する a および b ごとに発生することに注意してください。

ループの内側

double a = Convert.ToDouble(cols[1]);
int b = Convert.ToInt32(cols[3]);
MyClass.DoSomething(a,b);
于 2012-08-03T07:12:46.353 に答える
0

Int32.TryParseそもそも例外を取得しないようにする方が良いかもしれませんが、次のレベルにスローするには、使用しますthrow( throw vs throw ex については here を参照してください)。つまり、あなたのコードでは、次のようなものです

try {
    while (!sStreamReader.EndOfStream)
        {
            string sLine = sStreamReader.ReadLine();
            // make sure we have something to work with
            if (String.IsNullOrEmpty(sLine)) continue;

            string[] cols = sLine.Split(',');
            // make sure we have the minimum number of columns to process
            if (cols.Length > 4)
            {
                double a = Convert.ToDouble(cols[1]);
                Console.Write(a);
                int b = Convert.ToInt32(cols[3]);
                Console.WriteLine(b);
                Console.WriteLine();
            }
        }
} catch {
    throw;
}
于 2012-08-03T07:07:53.443 に答える
0

現在、ステートメントからaand/orを使用することはできません。これは、そこで宣言しているだけなので、(if ステートメントの) 最後の中括弧までしかアクセスできないためです。bif

それ以上のアクセスが必要な場合は、事前に宣言する必要があります。whileつまり、ループだけで使用する場合は、次のようにします。

    while (!sStreamReader.EndOfStream)
    {
        double a = 0.00;
        int b = 0;

        string sLine = sStreamReader.ReadLine();
        // make sure we have something to work with
        if (String.IsNullOrEmpty(sLine)) continue;

        string[] cols = sLine.Split(',');
        // make sure we have the minimum number of columns to process
        if (cols.Length > 4)
        {
            a = Convert.ToDouble(cols[1]);
            b = Convert.ToInt32(cols[3]);
        }

        // You can now use these here too!
        Console.Write(a);
        Console.WriteLine(b);
        Console.WriteLine();
    }

の範囲外でも使用したい場合 (この単語をループしたい場合があります) while、.while

これは 1 つの値に対してのみ機能することに注意してください。aとの値はb毎回上書きされます。値のリストまたは何かが必要な場合は、渡すことができる配列を作成します。(ジョナスの例を参照)

于 2012-08-03T07:18:30.223 に答える