C#重载返回类型 – 推荐方法

我有一种情况,我只希望返回类型与方法重载不同,但你不能在C#中这样做。

处理这个问题的最佳方法是什么? 事实是我需要这个意味着我的程序结构存在缺陷吗?

鉴于在C#中这是不可能的,推荐的方法是什么?

通常,您只需为方法指定不同的名称。

一个例子是IDataReaderGetInt32GetInt64等。

说实话,我相信这通常会让你更清楚你正在尝试做什么 – 特别是如果你随后用结果调用重载方法:

 Console.WriteLine(reader.GetInt32()); // This is clear Console.WriteLine(foo.OverloadedGet()); // Which overload of OverloadedGet? 

鉴于在C#中这是不可能的,推荐的方法是什么?

这取决于你为什么需要这个。

最常见的方法是使用不同的名称。 在许多情况下,框架会执行此操作,例如Convert类 。

如果要支持多种类型,可以通过通用方法执行此操作:

 T SomeMethod() // Optionally add constraints:" where T : IFoo { 

通用方法方法对于repostories是常见的,因为通常存在“Entity”类型的基类。

您可以使用另一个参数指定返回类型。

 public static T[] Method1(int i, T type) { return new T[i]; } 

我已经发布了一个答案,但这是另一种方式:使用object的。

 object TheMethod(MyEnum type) { if (type == MyEnum.A) return (object)SubMethod1(); else if (type == MyEnum.B) return (object)SubMethod2(); //... } int SubMethod1() { return 1; } string SubMethod2() { return "a"; } 

并将结果转换为适当的类型。