如果我将类转换为对象,如何获取公共变量值

时间:2016-01-20 05:48:18

标签: c# class object

我有这个班级

class data_
{
  public string string_data;
  public int index_data;
  public data_(string s,int i)
  {
     string_data = s;
     index_data = i;
  }
}

现在我将此类作为

中的对象传递
public partial class Form1:Form
{
    private void Button1_Click(object sender, EventArgs e)
    {
        int index =0;
        foreach(string line in File.ReadLines("data"))
        {
            Threadpool(new WaitCallBack(execute,new data_(line,index))); // I am passing the class as an object here
            ++index;
        }
    }
    private void execute(object processed_data)
    {
        string text = processed_data.string_data; //error
        int index = processed_data.index_data; //error
        // work and work
    }
}

正如您所看到的,类data_有2个可以使用的公共变量,我在开始一个帖子时分配它们的值,但我不能processed_data.string_data或{{1}因为它作为一个对象传递,而WaitCallBack只接受对象,没有别的。那么如何在processed_data.index_data void中访问processed_data 2个变量?(因为看起来我将这个类作为对象传递后,这2个变量就消失了)

2 个答案:

答案 0 :(得分:2)

进入新方法后,您可以将对象强制转换为原始类型。

private void execute(object processed_data)
{
    var data = (data_)processed_data;
}

当然,如果您打算这样做,那么您可以将方法参数设置为正确的类型。

答案 1 :(得分:2)

由于您至少使用的是.NET 4(请参阅File.ReadLines),因此您既不需要输入,也不需要ThreadPool / Thread

假设一行的数据处理独立于另一行,您可以使用Parallel.ForEach

private void Button1_Click(object sender, EventArgs e)
{
    Parallel.Foreach(File
        .ReadLines("data")
        .Select((line, index) => new data_(line, index)), execute);        
}

private void execute(data_ processed_data)
{
    // work and work
}

ForEach将在内部使用ThreadPool,但它会为您执行此操作,您将按原样传递参数,而无需在以后投射它们。

要了解秘密会发生什么,我建议您从这些链接开始: