-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

您可能会更好,Int32.TryParse因此您一开始就不会遇到异常,但是要将其抛出到下一个级别,您会使用throw请参阅此处的 throw 与 throw ex)。即:在你的代码中,类似

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

现在你不能使用a和/或b退出if语句。这是因为您只是在此处声明它们,因此您只能在最后一个大括号(if 语句的)之前访问它们。

如果您想访问它们,则必须提前声明它们。即,如果您希望它们仅在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.

请注意,这仅适用于一个值。a和的值b每次都会被覆盖。如果您想要一个值列表或其他东西,请创建一个可以传递的数组。(见乔纳斯的例子)

于 2012-08-03T07:18:30.223 回答
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 回答