我有一种情况,我只希望方法重载的返回类型不同,但你不能在 C# 中这样做。
处理这个问题的最佳方法是什么?我需要这个事实是否意味着我的程序结构有缺陷?
鉴于这在 C# 中是不可能的,推荐的方法是什么?
我有一种情况,我只希望方法重载的返回类型不同,但你不能在 C# 中这样做。
处理这个问题的最佳方法是什么?我需要这个事实是否意味着我的程序结构有缺陷?
鉴于这在 C# 中是不可能的,推荐的方法是什么?
通常,您只需为方法指定不同的名称。
这方面的一个例子是IDataReader
withGetInt32
等GetInt64
。
老实说,我相信这通常会让你更清楚你想要做什么 - 特别是如果你然后用结果调用重载方法:
Console.WriteLine(reader.GetInt32()); // This is clear
Console.WriteLine(foo.OverloadedGet()); // Which overload of OverloadedGet?
鉴于这在 C# 中是不可能的,推荐的方法是什么?
这取决于你为什么需要这个。
最常见的方法是只使用不同的名称。框架在很多情况下都会这样做,例如Convert 类。
如果你想支持多种类型,你可以通过泛型方法做到这一点:
T SomeMethod<T>()
// Optionally add constraints:"
where T : IFoo
{
通用方法方法对于存储库很常见,因为通常存在“实体”类型的基类。
您可以使用另一个参数指定返回类型。
public static T[] Method1<T>(int i, T type)
{
return new T[i];
}
我已经发布了一个答案,但这里有另一种方式:使用object
's.
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"; }
并将结果转换为适当的类型。