我正在编写一个执行强制转换的方法,我需要接收一个类型作为参数,例如:
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
}
}
答案 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) {
...
}