如何接收类型作为参数?

时间:2012-01-22 01:50:12

标签: c# .net type-conversion

我正在编写一个执行强制转换的方法,我需要接收一个类型作为参数,例如:

object foo(?? type, object input) { 

    if(type is x ) { 
       Output output = new Output();
       x xValue = (x) input; 
       foreach(var val xValue) { 
          //do.. 
       }

       return output; 
    }

    if(type is y) {
          Output2 output = new Output2();
          y yValue = (y) input; 

        foreach(var val yValue) { 
          //do.. 
        }

       return output;
    } else { 
      //invalid type
    }
}

3 个答案:

答案 0 :(得分:4)

使用类型参数:

object foo<T>(T input) {
  if (T is x) { ...
  ...

另外,你的方法有点奇怪,你的分支似乎有很多共性,测试类型通常不是一个好方法。努力统一它们或将方法拆分为特定于类型的重载:

Output foo(x input) ...

Output2 foo(y input) ...

...

并且,尝试使用更具体的返回类型,如上所示。

答案 1 :(得分:1)

做你要问的事:

object foo(System.Type type, object input) { 
...
}

但是为什么不为每种类型使用不同的方法?通过使用可以处理不同类型的单片方法,您获得了什么?

答案 2 :(得分:1)

听起来你想要一个Type作为输入,其中type是input参数的类型。如果是这样,那么最简单的方法是使用通用函数

object foo<T>(T input) {
  Type type = typeof(T);
  ...
}

你甚至可以有一个重载,明确地取Type并将通用函数提供给它

object foo<T>(T input) {
  return foo(typeof(T), input);
}

object foo(Type type, object input) {
  ...
}