2009-04-13 87 views

回答

26

您必须为此使用泛型。例如,

protected T Test<T>(T parameter) 
{ 

} 

在这个例子中,“<T>”告诉它代表一个类型的名称编译器,但你不知道这是在创造这个函数的上下文是什么。

protected int Test(string p) { ... } 
protected string Test(DateTime p) { .... } 
1

然后,你需要使用泛型。

protected T Test(T type) { 

return type; 

} 
+0

@Shiko,其实如果你看的时间戳,这次来到亚当的答案之前。 – uchamp 2016-12-08 19:39:23

+0

@uchamp我的不好,我会删除我的评论 – Shiko 2016-12-09 01:52:14

5

事实上,假设你有一组已知的参数和返回类型,它可以用简单的重载处理不是一种动态语言。要在C#中解决这个问题,您可以稍后返回一个通用对象和类型转换为任何您认为值应该是 - 不建议。你也可以返回一个接口,这样你并不真正在意某个特定的类实例。正如其他人指出的,你也可以使用泛型。这真的取决于你在函数体内需要/想要做什么,因为上面的所有方法都有其自身的局限性。

+0

这里的问题是如果调用者在调用之前不知道类型。例如,只有一个字符串或int不是两个都有效。 – rolls 2017-06-23 05:00:32

+0

@rolls - 当然他有。他将某种类型的变量(或常量)传递给该方法。他将返回值放入某种类型的变量中。他显然希望在不同类型的不同地方使用相同的方法。 – 2017-06-23 19:59:41

1

C#:那么你最终调用它像...

int foo; 

int bar = Test<int>(foo); 
13

虽然接受的答案是好的,它已经两年多,因为它是书面的,所以,我要补充一点,你可以使用:

protected dynamic methodname(dynamic input) 
{ 
    return input; 
} 

输入将返回为同一类型,和你不需要将该方法作为通用方法调用。

参考:
https://msdn.microsoft.com/en-us/library/dd264736.aspx