如何切换参数类型

时间:2014-06-04 02:49:08

标签: c# reflection

我有Method1,Method2和Method3。

Method1返回Type int。 Method2返回Type string。

当Method3根据method1或method2的返回类型获取int或string参数时。

public void Method3 (ParameterType parm) { logic... }

问题是: 如何根据Method1和Method2的类型切换传递的ParameterType。这当然是问题的简化版本。实际上,有许多方法可以返回不同类型的值。基于当前调用的方法,例如Method1,如何提取其类型,然后用新类型替换Method3的ParameterType。

2 个答案:

答案 0 :(得分:3)

您可以定义通用方法,例如

public void Method3<T>(T parm)
{
    // ...
}

您只需调用该方法并传递一个参数,该参数的类型即可为该调用修复T。这意味着T可以是任何类型,因此方法中的代码必须以适用于任何类型的方式使用parm

您可以将某些约束应用于通用类型参数,例如它必须是或继承一个特定的类,必须实现一个特定的接口或必须有一个无参数的构造函数。尽管如此,intstring都没有约束力。

如果您不能为可能作为参数传递的所有类型编写公共代码,则不能选择单个通用方法。您必须重载该方法并编写两个或多个泛型和/或非泛型方法,其参数覆盖您希望能够接受的各种类型的参数,例如。

public void Method3<T>(T parm) where T : class
{
    // ...
}

public void Method3(int parm)
{
    // ...
}

public void Method3(double parm)
{
    // ...
}

答案 1 :(得分:1)

它被称为重载

public void Method3 (int parm) { logic... }

public void Method3 (string parm) { logic... }


public void Foo(){
    Method3(Method1());
    Method3(Method2());
}