如何切换参数类型



我有Method1, Method2和Method3。

Method1返回Type int。Method2返回Type字符串

而Method3根据method1或method2的返回类型接受int或string形参。

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

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

您可以定义一个泛型方法,例如

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)
{
    // ...
}

这叫做重载:

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

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

相关内容

  • 没有找到相关文章

最新更新