2012-01-22 106 views
0

我正在写做一个铸件的方法,我需要收到类型放慢参数,例如:如何接收类型作为参数?

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

类型为'系统。键入'或键入特定(或继承)类型的对象? –

+0

类型为'CookieCollection','CookieContainer' .. – Jack

回答

4

使用类型参数:

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

而且,你的方法是有点怪异,似乎有很多共性的在你的分支,并测试类型通常不是一个好方法。作出努力,以统一他们或拆分方法特定类型的重载:

Output foo(x input) ... 

Output2 foo(y input) ... 

... 

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

1

做什么你问:

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

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

1

这听起来像你想要一个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) { 
    ... 
} 
+0

你可以在此扩展吗?这正是我要找的。我正在请求数据集中的值,并且我要求开发者发送变量类型以便返回,以便我的返回语句类似于(returnType)ds.Tables [0] .Rows [0] [columnName] – ganders

+0

在这种情况下,@ganders你会基本上做一些如下所示的'T foo (){return(T)...; }' – JaredPar