【问题标题】:c# Generics : Can I combine overloaded methods into one with different return/input data types?c#泛型:我可以将重载的方法组合成一个具有不同返回/输入数据类型的方法吗?
【发布时间】:2018-03-10 11:22:06
【问题描述】:

如果可能,我想将 4 个静态辅助方法合并为一个。除了输入参数数据类型以及在 ReturnDto 和 ReturnDto 类型中设置值之外,每个方法都是相同的。我对泛型还很陌生,但我什至不确定除了拥有 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 };
}

【问题讨论】:

  • 您的示例中的 val2 和 val3 是什么?

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


【解决方案1】:

是的:

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

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

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

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

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

【讨论】:

  • 您还应该注意,通过提供特定类型作为参数,您在调用时无需指定泛型类型。
  • 现在回想起来真是太有趣了。我在仿制药上是 100% 的绿色,一位同事让它听起来比它复杂得多。如果我花了 15 分钟来真正查找它,我什至不会发布这个!
猜你喜欢
  • 1970-01-01
  • 2016-05-13
  • 1970-01-01
  • 1970-01-01
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
相关资源
最近更新 更多