C#中一個(gè)方法返回多個(gè)值的實(shí)現(xiàn)方法小結(jié)
前言
通常一個(gè)方法只能返回一個(gè)值,但是如果在某些時(shí)候,我們想要返回多個(gè)值,例如某個(gè)方法將一個(gè)浮點(diǎn)數(shù)分割成一個(gè)整數(shù)和一個(gè)小數(shù)返回。
C#)中,函數(shù)方法想返回多個(gè)值,通過元組、列表、數(shù)組、類、結(jié)構(gòu)體和out參數(shù)實(shí)現(xiàn)的方法及示例代碼。
實(shí)現(xiàn)方法
1?使用元組實(shí)現(xiàn)返回多個(gè)值(ValueTuple和Tuple)
1) 使用ValueTuple實(shí)現(xiàn)
ValueTuple命名為元組(在C#7.1中可用),優(yōu)點(diǎn)是它最簡潔,不可變且易于構(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實(shí)現(xiàn)
.NET Framework已經(jīng)具有通用的Tuple類。但是,這些類有兩個(gè)主要限制。首先,Tuple類將其屬性命名為Item1,Item2,依此類推。這些名稱不包含語義信息。使用這些元組類型不能實(shí)現(xiàn)傳達(dá)每個(gè)屬性的含義。新的語言功能使您可以為元組中的元素聲明和使用語義上有意義的名稱。
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ù)組實(shí)現(xiàn)返回多個(gè)值
1) 使用List列表實(shí)現(xiàn)
private List<double> GetHeight()
{
return new List<double>(){1,2};
}
var result = GetHeight();
Console.WriteLine($"{result[0]}, {result[1]}");2) 使用數(shù)組實(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)體返回多個(gè)值
1) 使用類實(shí)現(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)體實(shí)現(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ù)實(shí)現(xiàn)
參數(shù)進(jìn)行的任何操作都是在自變量上進(jìn)行的。就像ref關(guān)鍵字一樣,除了ref要求在傳遞變量之前先對其進(jìn)行初始化。它也類似于in關(guān)鍵字,除了in不允許調(diào)用的方法修改參數(shù)值。要使用out參數(shù),方法定義和調(diào)用方法都必須顯式使用out關(guān)鍵字。
1) 多個(gè)out參數(shù)實(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實(shí)現(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)絡(luò)是否暢通
/// </summary>
/// <param name="urls">URL數(shù)據(jù)</param>
/// <param name="errorCount">ping時(shí)連接失敗個(gè)數(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("目標(biāo)服務(wù)器{0}不可達(dá),錯(cuò)誤計(jì)數(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)絡(luò)連接狀態(tài)
/// </summary>
/// <param name="urls"></param>
//public static void CheckServeStatus(string[] urls)
public bool CheckNetStatus(string[] urls)
{
int errCount = 0;//ping時(shí)連接失敗個(gè)數(shù)
//if (!LocalConnectionStatus())
//{
// Console.WriteLine("網(wǎng)絡(luò)異常~無連接");
//}
if (!MyPing(urls, out errCount))
{
if ((double)errCount / urls.Length >= 0.3)
{
Debug.Log("網(wǎng)絡(luò)連接異常");
return false;
//Console.WriteLine("網(wǎng)絡(luò)異常~連接多次無響應(yīng)");
}
else
{
Debug.Log("網(wǎng)絡(luò)連接正常");
return true;
}
}
else
{
Debug.Log("網(wǎng)絡(luò)連接正常");
return true;
//Console.WriteLine("網(wǎng)絡(luò)正常");
}
}到此這篇關(guān)于C#中一個(gè)方法返回多個(gè)值的實(shí)現(xiàn)方法小結(jié)的文章就介紹到這了,更多相關(guān)C#中一個(gè)方法返回多個(gè)值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實(shí)現(xiàn)獲取電腦硬件顯卡核心代號(hào)信息
這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)獲取電腦硬件顯卡核心代號(hào)信息,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01
C#控制臺(tái)程序中處理2個(gè)關(guān)閉事件的代碼實(shí)例
這篇文章主要介紹了C#控制臺(tái)程序中處理2個(gè)關(guān)閉事件的代碼實(shí)例,本文中的2個(gè)關(guān)閉事件是指Ctrl+C事件和窗口的關(guān)閉按鈕事件,需要的朋友可以參考下2014-09-09
Unity游戲開發(fā)中必備的設(shè)計(jì)模式之外觀模式詳解
外觀模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,為復(fù)雜系統(tǒng)提供了簡單的接口,使得子系統(tǒng)間的通信更加簡潔和易于維護(hù)。在Unity游戲開發(fā)中,外觀模式可以幫助開發(fā)者更好地管理游戲?qū)ο蠛徒M件等復(fù)雜結(jié)構(gòu)2023-05-05
C#實(shí)現(xiàn)對文件進(jìn)行加密解密的方法
這篇文章主要介紹了C#實(shí)現(xiàn)對文件進(jìn)行加密解密的方法,涉及C#加密與解密的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04
如何用C#找出數(shù)組中只出現(xiàn)了一次的數(shù)字
數(shù)組從字面上理解就是存放一組數(shù),下面這篇文章主要給大家介紹了關(guān)于如何用C#找出數(shù)組中只出現(xiàn)了一次的數(shù)字,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12

