如何在C#中为传递给Thread的参数转换数据类型

时间:2011-06-27 22:43:24

标签: c# multithreading casting

我有一个可能需要几种数据类型的MyFunction,它们都非常相似。我只想将所有这些不同类型的数据传递到MyFunction中,使用多线程并在MyFunction中进行类型转换。这可能吗?使用字典是个好主意吗?请指教。

Main(){
    Parallel.ForEach(objectType1, MyFunction)
    Parallel.ForEach(objectType2, MyFunction)
    Parallel.ForEach(objectType3, MyFunction)
}

MyFunction(object arg){
  Dictionary<string, object> d = (Dictionary<string, object>) arg;
  Type1 t1;
  Type2 t2;
  Type3 t3;
  if (d.Key == "Type1") {
        t1 = (Type1) d.Value;
        ProcessType1(t1);
  }
  else if (d.Key == "Type2") {
    t2 = (Type2) d.Value;
        ProcessType2(t2);
  }
  else if (d.Key == "Type3") {
    t3 = (Type3) d.Value;    
        ProcessType3(t3);
  }

}

3 个答案:

答案 0 :(得分:2)

你可以这样做:

MyFunction (object arg) {
    if (arg is Type1) { ProcessType1(arg as Type1); }

    else if (arg is Type2) { ProcessType2(arg as Type2); }

    else if (arg is Type3) { ProcessType3(arg as Type3); }
}

答案 1 :(得分:1)

If (object is type)
{
var type1 = object as type
//Process
}

不确定为什么还需要其他任何东西。

您还可以使用策略模式并发送IStrategy具体类。

答案 2 :(得分:1)

您可以使用通用方法。也许是这样的:

    private void MyFunction<T>(T arg)
    {

    }

您甚至可以通过使其成为通用方法并在一次方法调用中处理所有方法来减少void ProcessTypeX(object arg)方法的数量。我认为这取决于方法本身的复杂性。