如何将变量的值从一个类的循环抛出到另一个类

时间:2012-08-03 07:02:15

标签: c#

我试图将一个类的循环的值用于另一个类 我该怎么做。 请帮帮我..

       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的值用于另一个类。 这个循环是另一个类。

3 个答案:

答案 0 :(得分:0)

Int32.TryParse你可能会更好,所以你不会首先得到例外,但是要把它推到一个新的级别,你会使用throw({{3 }})。即:在tyour代码中,类似

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;
}

答案 1 :(得分: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案例? 只需将它们直接发送到类构造函数或方法,并直接在循环内部使用它们,请注意这将发生在a和b之前,匹配cols.length&gt; 4。

循环内的

double a = Convert.ToDouble(cols[1]);
int b = Convert.ToInt32(cols[3]);
MyClass.DoSomething(a,b);

答案 2 :(得分: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之外的另一个级别。

请注意,这仅适用于一个值。 ab的值每次都会被覆盖。 如果您想要一个值列表或某些东西创建一个可以传递的数组。 (见Jonas的例子)