C# 方法的out、ref、params參數

来源:https://www.cnblogs.com/qy1234/archive/2019/11/09/11826649.html
-Advertisement-
Play Games

一、out參數實例 【實例】求一個數組中的最大值、最小值、總和、平均值 執行代碼輸出結果,如圖所示: 總結: 如果一個方法中,返回多個相同類型的值時候,我們可以考慮返回一個數組。但是返回多個不同類型的值時候,返回數組就不行,那麼這個時候,我們可以考慮用out參數。 out參數就側重於一個方法可以返回 ...


  一、out參數實例

【實例】求一個數組中的最大值、最小值、總和、平均值

  class Program
    {
        static void Main(string[] args)
        {
            //寫一個方法 求一個數組中的最大值、最小值、總和、平均值
            int[] nums = { 1, 2, 3, 4, 5, 6 ,7};
            int max;
            int sum;
            int min;
            int avg;
            bool b;
            string s;
            double d;
            GetValue(nums, out max, out min, out sum, out avg,out b,out s,out d);
            Console.WriteLine("數組中的最大值:{0},最小值:{1},總和:{2},平均值:{3}",max ,min,sum,avg);
            Console.WriteLine("輸出out參數的方法不同類型的值:{0},{1},{2}",b,s,d);
            Console.ReadKey();
        }
        /// <summary>
        /// 求一個整數的數組的最大值,最小值,總和,平均值
        /// </summary>
        /// <param name="nums">要求值的數組</param>
        /// <param name="max">返回的最大值</param>
        /// <param name="min">返回的最小值</param>
        /// <param name="sum">返回的總和</param>
        /// <param name="avg">返回的平均值</param>
        public static void GetValue(int[] nums, out int max, out int min, out int sum, out int avg, out bool b,out string s,out double d)
        {
           //out參數要求在方法的內部必須為其賦值
            max = nums[0];
            min = nums[0];
            sum = 0;
            for (int i = 0; i < nums.Length; i++)
            {
                if (nums[i]>max)
                {
                    max = nums[i];
                }
                if (nums[i]<min)
                {
                    min = nums[i];
                }
                sum += nums[i];
            } 
            avg = sum / nums.Length;

            b = true;
            s = "123";
            d = 3.13;
        }
    }

執行代碼輸出結果,如圖所示:

總結:

如果一個方法中,返回多個相同類型的值時候,我們可以考慮返回一個數組。但是返回多個不同類型的值時候,返回數組就不行,那麼這個時候,我們可以考慮用out參數。

out參數就側重於一個方法可以返回多個不同類型的值。

 

二、ref參數的實例

【實例】使用方法來交換兩個int類型的變數

 class Program
    {
        static void Main(string[] args)
        {
            //使用方法來交換兩個int類型的變數
            int n1 = 10;
            int n2 = 20;
            Test(ref n1, ref n2);
            Console.WriteLine("兩個值互相交換後n1為{0},n2為:{1}",n1,n2);
            Console.ReadKey();
        }
        public static void  Test(ref int n1,ref int n2)
        {
            int temp = n1;
            n1 = n2;
            n2 = temp;
        }
    }

執行代碼輸出結果,如圖所示:

總結:

ref參數能夠將一個變數帶入一個方法中進行改變,改變完成後,再將改變後的值帶出方法。

 ref參數要求在方法外必須要賦值,而方法內可以不賦值。

 

三、params可變參數

【實例】求任意長度數組的和 整數類型的

 class Program
    {
        static void Main(string[] args)
        {
            //求任意長度數組的和 整數類型的
            int[] nums = { 1, 2, 3, 4, 5, 6 };
            int sum = GetSum(8,9);
            Console.WriteLine(sum);
            Console.ReadKey();
        }
        public static int GetSum(params int[] nums)
        {
            int sum = 0;
            for (int i = 0; i < nums.Length; i++)
            {
                sum += nums[i];
            }
            return sum;
        }
    } 

執行代碼輸出結果,如圖所示:

如圖所示:

 總結:

將實參數列表中跟可變參數數組類型一致的元素都當做數組的元素去處理

params可變參數必須是形參列表中的最後一個元素,並且在方法聲明中只允許一個params關鍵字。

 

四、out 與ref的區別

區別:

1.使用ref參數時,傳入的參數必須被初始化,對out而言,必須在方法中對其完成初始化。

2.使用ref參數和out參數時,在方法的參數和執行方法時,都要加ref或者out關鍵字。

3.out參數適合用在需要return多個返回值的地方,而ref參數則用在需要被調用的方法修改調用者的引用的時候。

如圖所示:

out參數

ref參數

ref關鍵字是需要先初始化傳入的參數,才能夠使用。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、Dubbo誕生背景(摘自Dubbo官網-入門-背景) 二、Dubbo架構圖(摘自Dubbo官網-入門-架構) 三、Dubbo核心依賴(jar包):dubbo、zkclient 四、Dubbo項目搭建的方式:配置文件式、註解式 五、Dubbo項目配置文件的核心配置: (一)配置文件式 1. 服務提 ...
  • 1. 模塊 1.1 什麼是模塊 別人寫好的函數、變數、方法放在一個文件里 (這個文件可以被我們直接使用)這個文件就是個模塊 常見的場景:一個模塊就是一個包含了python定義和聲明的文件,文件名就是模塊名字加上.py的尾碼。 但其實import載入的模塊分為四個通用類別: 1.使用python編寫的 ...
  • 一.前言 從這個簡單程式的輸出結果,你想到了什麼?是不是與你心中想的結果不一致?是不是覺得輸出的結果應該為:i is 1,o is 8,o2 is 8 二.程式執行前 圖 2 我們都知道,每一個方法在執行前,操作系統會給方法內每個變數分配記憶體空間。從圖2中就可以看出,在執行前各變數(i,o,o2)已 ...
  • 在一般的前後端分離的web系統開發中,在服務端除了對用戶數據的緩存之外,往往在某些介面上,還涉及到對用戶許可權的限制,有的介面只能讓具有特定許可權的人員才可以訪問。 這樣以來就可以加強系統的安全性,在前面章節中簡單講了 MemoryCache與redis緩存的使用 ,方便將用戶數據緩存到伺服器上在需要的 ...
  • Gtksharp編譯時提示下載gtk文件問題 1、昨天晚上新建gtksharp項目之後,安裝gtksharp之後,編譯時無法成功,提示無法下載gtk 3.24.zip 2、記得前幾天,另一個項目可以生成的。就打開老項目、運行、編譯成功。那會不會是今天寫的代碼導致的,註釋之後編譯還是失敗。沒辦法重新新 ...
  • 前言: 在使用百度編輯器UEditor的時候,如何將圖片保存到伺服器,我剛開始以為是要自己寫上傳文件的方法,後來發現只需要配置一下即可,如果你也正在使用百度富文本編輯器UEditor的話,這篇文章將非常適合你 我使用的C# 1、首先從官網下載插件,一般都是UTF-8格式的,我直接下載了asp版本的: ...
  • 一、簡介 方法重載指的就是方法名稱相同,但是參數不同。 參數不同,分為兩種情況: 如果參數的個數相同,那麼參數的類型就不能相同。 如果參數的類型類型相同,那麼參數的個數不能相同。 註意:方法的重載跟返回值沒有關係 二、舉例 如圖所示,我們經常用到控制台輸出的Console.WriteLine();W ...
  • Nuget 是 dotnet 開發中必不可少的包管理工具,但不僅僅局限於 dotnet 項目,在 VS 中使用 C++ 開發的時候,也可以使用 Nuget 來引用第三方組件。同樣也可以用 Nuget 把 native 的一些組件打包,提供給自己或者別人使用。 這片博文記錄一下如何把 WinRT 組件 ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...