如何在c#中重构方法以接受泛型类型作为参数
本文关键字:泛型类型 参数 方法 重构 | 更新日期: 2023-09-27 17:54:46
我有一堆方法创建相同的结果类型,但它们的参数类型不同。假设int
为结果类型,bool
、int
、float
等为结果类型,和原型是这样的:
int method1(int param1);
int method2(bool param1);
int method3(float param1);
我如何重构它们,使它们看起来像这样:
int methodGenericVersion1<T>(T arg1);
顺便说一下,我看不到那些非泛型方法的实现。
编辑
我想这样调用:
methodGenericVersion1<int>(param1);
methodGenericVersion1<bool>(param1);
methodGenericVersion1<float>(param1);
听起来你想要分派到基于实际泛型类型的"正确"方法,像这样:
public int GenericMethod<T>(T t)
{
if (t is int)
{
return method1(t as int);
}
else if (t is bool)
{
return method2(t as bool);
}
else if (t is float)
{
return method3(t as float);
}
...
throw new ArgumentInvalidException(...);
}
然而,如果目标是提供一个可以在有限类型范围内多态使用的"单一方法",那么我质疑为什么泛型是必要的。您可以使用方法重载并获得完全相同的开发体验,如下所示:
public int method(int arg)
{
return method1(arg);
}
public int method(bool arg)
{
return method2(arg);
}
public int method(float arg)
{
return method3(arg);
}
你很接近了。你只需要在方法名中指定像这样的泛型参数:
int methodGenericVersion1<T>(T arg1)
如果你只想传递值类型,你也可能想添加一个struct
约束:
int methodGenericVersion1<T>(T arg1) where T : struct
你可以这样做:
int Test<T>(T v)
{
return -1;
}