C#中一個方法返回多個值的實現(xiàn)方法小結(jié)
前言
通常一個方法只能返回一個值,但是如果在某些時候,我們想要返回多個值,例如某個方法將一個浮點數(shù)分割成一個整數(shù)和一個小數(shù)返回。
C#)中,函數(shù)方法想返回多個值,通過元組、列表、數(shù)組、類、結(jié)構(gòu)體和out參數(shù)實現(xiàn)的方法及示例代碼。
實現(xiàn)方法
1?使用元組實現(xiàn)返回多個值(ValueTuple和Tuple)
1) 使用ValueTuple實現(xiàn)
ValueTuple
命名為元組(在C#7.1中可用),優(yōu)點是它最簡潔,不可變且易于構(gòu)造。
private (double first, double second) GetHeight() { return (1,2); } var result = GetHeight(); Console.WriteLine($"{result.first}, {result.second}"); var (first, second) = GetHeight(); Console.WriteLine($"{first}, {second}");
2) 使用Tuple實現(xiàn)
.NET Framework已經(jīng)具有通用的Tuple類。但是,這些類有兩個主要限制。首先,Tuple類將其屬性命名為Item1,Item2,依此類推。這些名稱不包含語義信息。使用這些元組類型不能實現(xiàn)傳達每個屬性的含義。新的語言功能使您可以為元組中的元素聲明和使用語義上有意義的名稱。
public Tuple<int, int> ViaClassicTuple() { return new Tuple<int, int>(1,2); } var tuple = ViaClassicTuple(); Console.WriteLine($"{tuple.Item1}, {tuple.Item2}");
2?使用列表(list<T>)或數(shù)組實現(xiàn)返回多個值
1) 使用List列表實現(xiàn)
private List<double> GetHeight() { return new List<double>(){1,2}; } var result = GetHeight(); Console.WriteLine($"{result[0]}, {result[1]}");
2) 使用數(shù)組實現(xiàn)
private double[] GetHeight() { return new double[2]{ 1,2}; } var result = GetHeight(); Console.WriteLine($"{result[0]}, {result[1]}");
3?使用類或結(jié)構(gòu)體返回多個值
1) 使用類實現(xiàn)
public class SomeClass { public int First { get; set; } public int Second { get; set; } public SomeClass(int first, int second) { First = first; Second = second; } } public SomeClass ViaSomeClass() { return new SomeClass(1, 2); } var someClass = ViaSomeClass(); Console.WriteLine($"{someClass.First}, {someClass.Second}");
2) 使用結(jié)構(gòu)體實現(xiàn)
public struct ClassicStruct { public int First { get; set; } public int Second { get; set; } public ClassicStruct(int first, int second) { First = first; Second = second; } } public ClassicStruct ViaClassicStruct() { return new ClassicStruct(1, 2); } var classicStruct = ViaClassicStruct(); Console.WriteLine($"{classicStruct.First}, {classicStruct.Second}");
4?使用out參數(shù)實現(xiàn)
參數(shù)進行的任何操作都是在自變量上進行的。就像ref
關(guān)鍵字一樣,除了ref要求在傳遞變量之前先對其進行初始化。它也類似于in關(guān)鍵字,除了in不允許調(diào)用的方法修改參數(shù)值。要使用out
參數(shù),方法定義和調(diào)用方法都必須顯式使用out關(guān)鍵字。
1) 多個out參數(shù)實現(xiàn)
public bool ViaOutParams(out int first, out int second) { first = 1; second = 2; return someCondition; } if(ViaOutParams(out var firstInt, out var secondInt)) Console.WriteLine($"{firstInt}, {secondInt}");
2) 使用out ValueTuple實現(xiàn)
public bool ViaOutTuple(out (int first,int second) output) { output = (1, 2); return someCondition; } if (ViaOutTuple(out var output)) Console.WriteLine($"{output.first}, {output.second}");
用out關(guān)鍵字。
Demo1:
using System; namespace test { class Testout { public int getParts(double n, out double frac) { int whole; whole = (int)n; frac = n - whole; //pass fractional小數(shù) part back through frac return whole; //return integer portion 返回整數(shù)部分 } } class Useout { static void Main() { Testout Tout = new Testout(); int i; double f; i = Tout.getParts(1234.56789, out f); Console.WriteLine("整數(shù)部分:" + i); Console.WriteLine("小數(shù)部分:{0:#.###}" , f); Console.WriteLine("小數(shù)部分:" + f); Console.ReadKey(); //監(jiān)聽鍵盤事件,按任意鍵執(zhí)行退出 } } }
Demo2:
/// <summary> /// Ping命令檢測網(wǎng)絡是否暢通 /// </summary> /// <param name="urls">URL數(shù)據(jù)</param> /// <param name="errorCount">ping時連接失敗個數(shù)</param> /// <returns></returns> public static bool MyPing(string[] urls, out int errorCount) { bool isconnected = true; System.Net.NetworkInformation.Ping ping = new System.Net.NetworkInformation.Ping(); errorCount = 0; try { PingReply pr; for (int i = 0; i < urls.Length; i++) { pr = ping.Send(urls[i]); if (pr.Status != IPStatus.Success) { isconnected = false; errorCount++; Debug.LogFormat("目標服務器{0}不可達,錯誤計數(shù)errorCount={1}", urls[i], errorCount); } // Console.WriteLine("Ping " + urls[i] + " " + pr.Status.ToString()); Debug.Log("Ping " + urls[i] + " " + pr.Status.ToString()); } } catch { isconnected = false; errorCount = urls.Length; } //if (errorCount > 0 && errorCount < 3) // isconn = true; return isconnected; } /// <summary> /// 檢測網(wǎng)絡連接狀態(tài) /// </summary> /// <param name="urls"></param> //public static void CheckServeStatus(string[] urls) public bool CheckNetStatus(string[] urls) { int errCount = 0;//ping時連接失敗個數(shù) //if (!LocalConnectionStatus()) //{ // Console.WriteLine("網(wǎng)絡異常~無連接"); //} if (!MyPing(urls, out errCount)) { if ((double)errCount / urls.Length >= 0.3) { Debug.Log("網(wǎng)絡連接異常"); return false; //Console.WriteLine("網(wǎng)絡異常~連接多次無響應"); } else { Debug.Log("網(wǎng)絡連接正常"); return true; } } else { Debug.Log("網(wǎng)絡連接正常"); return true; //Console.WriteLine("網(wǎng)絡正常"); } }
到此這篇關(guān)于C#中一個方法返回多個值的實現(xiàn)方法小結(jié)的文章就介紹到這了,更多相關(guān)C#中一個方法返回多個值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Unity游戲開發(fā)中必備的設(shè)計模式之外觀模式詳解
外觀模式是一種結(jié)構(gòu)型設(shè)計模式,為復雜系統(tǒng)提供了簡單的接口,使得子系統(tǒng)間的通信更加簡潔和易于維護。在Unity游戲開發(fā)中,外觀模式可以幫助開發(fā)者更好地管理游戲?qū)ο蠛徒M件等復雜結(jié)構(gòu)2023-05-05如何用C#找出數(shù)組中只出現(xiàn)了一次的數(shù)字
數(shù)組從字面上理解就是存放一組數(shù),下面這篇文章主要給大家介紹了關(guān)于如何用C#找出數(shù)組中只出現(xiàn)了一次的數(shù)字,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-12-12