是否可以使用一个函数(int n,bool wantall)并根据bool返回不同的类型? 让我想到这一点的例子是产生斐波那契数字。 如果wantall = true,则返回前n个数字的数组(或列表),否则返回第n个数字。 有没有办法做到这一点?
答案 0 :(得分:10)
不,您无法更改返回类型。
对于您的示例,理想情况下,您应该针对所讨论的内容进行不同的重载
GetFirstFibonacciNumbers(int count)
GetSingleFibonacciNumber(int nth)
为此传递bool
只是丑陋。
但如果你坚持使用单一方法
IEnumerable<int> GetFibonacciNumbers(int n, bool wantall) {
if(!wantall) {
return new[] { GetSingleFibonacciNumber(n); }
}
else {
return GetFirstFibonacciNumbers(n);
}
}
但是,请不要这样做。
答案 1 :(得分:2)
public Object foo(int n, bool wantall)
{
// you can return whatever you want
}
答案 2 :(得分:0)
您可以返回object
或其他所有可能的返回类型继承的类型,但除此之外,您无法动态更改返回类型。
答案 3 :(得分:0)
不确定。返回一个object
或一个提供枚举的包装器,它会提示您实际在对象内部。
答案 4 :(得分:0)
您可以使用dynamic返回类型
答案 5 :(得分:0)
不,方法契约是在编译时定义的,不能在运行时更改。
一种选择是返回一个对象类型,但在这种情况下使用对象类型通常被认为是非类型安全的,所以最好的做法是避免使用它。
我看到了几种处理方式: -
答案 6 :(得分:0)
正如Jason所提到的,使用bool作为你的具体例子并不是一个好主意。但是,使用Generics这个问题真是没有意义:例如(使用您的具体示例)
public List<int> FibSequence(int i, int? n)
{
List<int> fibSeq = new List<int>();
//Calculate fib sequence
if(n != null)
{
return new List<int>() { fibSeq[n] };
}
return fibSeq;
}
同样,为了这个特殊的目的,它并不是很好,但是当“All”结果只是1时,我必须得到“全部X”的次数相当多(这将会降低可空的int参数,但代码本身非常相似)。然后你的代码只处理返回的通用列表,并考虑它是否有多个元素。