![](/img/trans.png)
[英]Change return type of a function in WCF without changing interface return type
[英]Is it possible to change the return type of a function
是否有可能采用(int n,bool wantall)並根據布爾返回不同類型的函數? 讓我想到的例子是生成斐波那契數。 如果wantall = true,則返回前n個數字的數組(或列表),否則,僅返回第n個數字。 有沒有辦法做到這一點?
不,您不能更改返回類型。
對於您的示例,理想情況下,您所談論的內容應該有不同的重載
GetFirstFibonacciNumbers(int count)
GetSingleFibonacciNumber(int nth)
為此傳遞一個bool
是很難的。
但是如果你堅持一種方法
IEnumerable<int> GetFibonacciNumbers(int n, bool wantall) {
if(!wantall) {
return new[] { GetSingleFibonacciNumber(n); }
}
else {
return GetFirstFibonacciNumbers(n);
}
}
但是,請不要這樣做。
public Object foo(int n, bool wantall)
{
// you can return whatever you want
}
您可以返回所有可能的返回類型都繼承自的object
或其他類型,但除此之外,您不能即時更改返回類型。
當然。 返回一個object
,或者提供一個枚舉的包裝器,該枚舉可向您提示對象內部的實際內容。
您可以使用動態返回類型
不可以,方法協定是在編譯時定義的,不能在運行時更改。
一種選擇是返回對象類型,但是在這種情況下使用該對象類型通常被認為是非類型安全的,因此最佳實踐是避免這種情況。
我看到幾種解決方法:-
正如Jason所提到的,將bool用於您的特定示例並不是一個好主意。 但是,使用泛型確實是一個問題,例如(使用您的特定示例)
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 of X”時,“ All”只變成了1(這將刪除可為空的int參數,但是代碼本身非常相似)。 然后,您的代碼只處理返回的通用列表,並考慮它是否包含多個元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.