【轉】[C#] 建立返回多個值的方法

z5337發表於2024-04-29

來源:https://mp.weixin.qq.com/s/LqFX32Cb4YeEQMOBYr23jQ

在遇到執行方法需要返回多個值的情況時(比如去資料庫查一個值,要同時返回資料庫查詢耗時),可以使用以下方式實現:

1、使用 Tuples

C# 中的元組提供了一種返回多個值的方法,而無需定義新的類或結構。讓我們瀏覽一個示例,該示例展示瞭如何使用元組來計算和返回兩個數字的總和和乘積:

public (int Sum, int Product) Calculate(int a, int b)  
{  
    return (a + b, a * b);  
}
var result = Calculate(2, 3);  
Console.WriteLine($"Sum: {result.Sum}, Product: {result.Product}");

2、使用 Out

在某些情況下,有必要在方法的主返回值旁邊返回其他資訊。這就是 C# 中的引數被證明是有價值的地方。讓我們瀏覽一個實際示例,該示例涉及一個分析日期字串並使用引數返回物件的方法:outDateTimeout

public bool TryParseDate(string dateString, out DateTime date)  
{  
    return DateTime.TryParse(dateString, out date);  
}

if (TryParseDate("2024-02-19", out DateTime resultDate))  
{  
    Console.WriteLine($"Parsed Date: {resultDate.ToShortDateString()}");  
}  
else  
{  
    Console.WriteLine("Invalid Date");  
}

3、使用 ValueTuple

C# 中的 ValueTuple 為處理元組操作(包括解構)提供了增強的多功能性。讓我們深入研究一個實用的例子,透過建立一個函式來演示 ValueTuple 的實用性,該函式提供結構中幾何形狀的尺寸:ValueTuple

public (int, int) GetDimensions()  
{  
    return (1024, 768);  
}

var (width, height) = GetDimensions();  
Console.WriteLine($"Width: {width}, Height: {height}");

4、返回自定義類或結構

在處理錯綜複雜的互連資料集時,建立自定義類或結構可以增強程式碼的清晰度和組織性。讓我們深入研究一個示例,在該示例中,我們定義了一個自定義類,該類被命名為封裝計算結果:OperationResult

public class OperationResult  
{  
    public int Sum { get; set; }  
    public int Product { get; set; }  
}

public OperationResult PerformCalculation(int a, int b)  
{  
    return new OperationResult { Sum = a + b, Product = a * b };  
}

var result = PerformCalculation(5, 4);  
Console.WriteLine($"Sum: {result.Sum}, Product: {result.Product}");

5、使用 Ref Return 和 Ref Locals

在需要直接修改資料而不進行不必要的複製的情況下,C# 提供了 ref 返回和 ref 區域性變數的概念。讓我們來探討一個實際示例,該示例演示瞭如何使用 ref returns 在陣列中查詢和返回對特定名稱的引用:

public ref string FindName(string[] names, string target)  
{  
    for (int i = 0; i < names.Length; i++)  
    {  
        if (names[i] == target)  
        {  
            return ref names[i]; // Return a reference to the array element  
        }  
    }    throw new Exception("Name not found");  
}

string[] names = { "Alice", "Bob", "Charlie" };  
ref string foundName = ref FindName(names, "Bob");  
foundName = "Bobby"; // Directly modifies the array  
Console.WriteLine(string.Join(", ", names)); // Outputs: Alice, Bobby, Charlie

實現這些方法不僅增強了程式碼的可讀性和可維護性,而且在處理多個返回值方面提供了靈活性和效率。對於開發人員來說,瞭解每種技術的優勢和用例以在專案中有效利用它們至關重要。

如果你喜歡我的文章,請給我一個贊!謝謝

來源:https://mp.weixin.qq.com/s/LqFX32Cb4YeEQMOBYr23jQ

相關文章