我有一堆创建相同结果类型的方法,但它们的参数类型各不相同。假设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);
答案 0 :(得分:3)
听起来你想根据实际的泛型类型调度到'正确'的方法,如下所示:
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);
}
答案 1 :(得分:1)
你是如此接近。你需要在方法名称中指定泛型参数,如下所示:
int methodGenericVersion1<T>(T arg1)
如果您只想传递值类型,也可以添加struct
约束:
int methodGenericVersion1<T>(T arg1) where T : struct
答案 2 :(得分:0)
您可以这样做:
int Test<T>(T v)
{
return -1;
}