c#泛型:我可以将重载方法组合成具有不同返回/输入数据类型的方法吗?

时间:2017-09-28 16:13:58

标签: c# generics overloading type-conversion strong-typing

如果可能的话,我想要将4个静态辅助方法组合成一个。除输入参数数据类型外,每种方法都相同,并在ReturnDto和ReturnDto类型中设置值。我对Generics来说还是比较新的,但是除了有4个强类型的方法之外,我甚至不确定这是否可以用于有效的事情。

private static ReturnDto<int> MethodName(int val)
private static ReturnDto<string> MethodName(string val)
private static ReturnDto<bool> MethodName(bool val)
private static ReturnDto<DateTime> MethodName(DateTime val)
{
    //do some stuff here...
    return new ReturnDto<DateTime> { Val = val, Val2 = val2, Val3 = val3 };
}

1 个答案:

答案 0 :(得分:6)

是:

private static ReturnDto<T> MethodName<T>(T val)

如果您将Tgeneric type parameter)替换为任何特定类型,您将获得所期望的方法。将T视为任何类型的占位符。如果任何类型无效,那么您可以限制它以符合某些规则;阅读this了解更多信息。

另外值得注意的是,类型推断允许您调用此方法而无需实际声明泛型类型:

var returnDto = MethodName(1); //instead of MethodName<int>(1)

T通过val int的类型推断出来;编译器有足够的信息来确定T的类型,你需要明确说明它。