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

本文关键字:Thread 参数 数据类型 转换 | 更新日期: 2023-09-27 18:00:28

我有一个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);
  }
}

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

你可以做:

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); }
}
If (object is type)
{
var type1 = object as type
//Process
}

不知道为什么需要其他东西。

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

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

    private void MyFunction<T>(T arg)
    {
    }

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