方法可以將資料回傳給呼叫端程式,回傳值會直接取代呼叫運算式所在位置。
如果方法需要回傳資料,必須在方法名稱前方宣告回傳型別;沒有回傳值則標記為void。
沒有回傳值的方法一樣可以使用 return,但不需要寫成 return 值;,只需要單獨撰寫 return; 即可。作用是結束程式執行,後續程式碼不會繼續執行,流程會回到呼叫該方法的地方。
int Add(int a, int b) // 回傳 int 型別
{
return a + b;
}Code language: JavaScript (javascript)
void SayHi() // 沒有回傳值
{
Console.WriteLine("hello welcome to foxdevelop.com");
}Code language: JavaScript (javascript)
1、具有回傳值的方法一定要使用 return 運算式;,運算式執行結果的型別必須和宣告的回傳型別相符;
int Add(int a, int b)
{
return 1.2; // 發生錯誤,1.2 屬於 double 型別,無法隱式轉換成 int,型別不一致導致編譯錯誤
}Code language: JavaScript (javascript)
上面這段程式嘗試回傳 double 數值,1.2 預設為 double,也就是浮點數,你可以理解成小數。編譯器無法自動把小數轉成整數,因此報錯。
如果反過來寫
double Add2()
{
return 10; // 10 是 int 型別,可以隱式轉換成 double,型別相容不會報錯
}Code language: JavaScript (javascript)
這樣撰寫就不會出現錯誤。雖然 10 是整數,但允許隱式轉換為 double,因此型別是相容的。不能只單純比較型別名稱,還要判斷是否支援隱式轉換。
所謂隱式轉換,就是不需要開發者手動撰寫轉換程式碼,由編譯器自動完成轉換。相對地,由程式設計師手動指定的轉換就稱為顯式轉換。
關於型別轉換的內容,後續章節會再說明。
2、方法內所有程式執行路徑,最後都一定要執行return回傳資料,不能存在任何沒有回傳的分支。

上方方法宣告要回傳 int,也就是方法名 Add 前面的 int。但是方法主體完全沒有任何 return,這種情況同樣會報錯。

像下面這樣撰寫也會報錯,因為 return 只有在 if 條件成立時才會執行。當 a >= b 的時候,程式不會執行 return,代表存在沒有回傳的執行路徑,因此觸發錯誤。

就算補上 else 區塊,如果裡面沒有撰寫 return 依然不行。問題相同,仍存在沒有回傳的分支。這項規則同樣適用其他流程控制敘述,務必確保所有執行分支都妥善處理。
有一個處理方式可以解決。在方法最後加上 return 作為備案,舉例如下
int Add(int a, int b)
{
if (a < b)
{
return a + b;
}
else
{
}
return -1; // 無論前面執行哪個分支,只要程式走到這裡就會回傳
// 等同使用 -1 當作備案回傳值。
}Code language: C# (cs)
回傳值支援基礎型別(int、string 等等)、自訂類別、集合等所有資料型別;
return 執行後會立刻中斷目前方法,後續程式碼不會執行;
帶有回傳值的方法呼叫,可以直接嵌入運算式、輸出列印、變數指派等各種場景。
回傳值