Giới Thiệu
Bạn đã bao giờ tự hỏi cách trả về nhiều giá trị cùng một lúc trong C# như cách làm trong JavaScript? Thực tế, C# cung cấp một số cách để giải quyết vấn đề này. Trong bài viết dưới đây, chúng ta sẽ cùng khám phá cách tìm ra số lớn nhất và nhỏ nhất từ danh sách số nguyên bằng một hàm duy nhất.
Cách 1: Sử Dụng Tuple
Clásicaly, trong JavaScript, người ta sử dụng destructuring, còn trong C# chúng ta tận dụng Tuple để làm điều này.
System.Tuple
Hãy bắt đầu với System.Tuple, một cách khá dài dòng nhưng hiệu quả. Xem ví dụ sau:
csharp
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static Tuple<int, int> FindMaxMin(List<int> numbers)
{
int max = numbers.Max();
int min = numbers.Min();
return Tuple.Create(max, min);
}
public static void Main()
{
var numbers = new List<int>{ 1, 10, 100, 99, 44, -1, 33, 99 };
var t = FindMaxMin(numbers);
Console.WriteLine($"Max = {t.Item1}, Min = {t.Item2}"); // Max = 100, Min = -1
}
}
ValueTuple
Tuy nhiên, có một cách khác ngắn gọn hơn chính là sử dụng ValueTuple:
csharp
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static (int max, int min) FindMaxMin(List<int> numbers)
{
int max = numbers.Max();
int min = numbers.Min();
return (max, min);
}
public static void Main()
{
var numbers = new List<int>{ 1, 10, 100, 99, 44, -1, 33, 99 };
var (max, min) = FindMaxMin(numbers);
Console.WriteLine($"Max = {max}, Min = {min}"); // Max = 100, Min = -1
}
}
Trong ví dụ này, chúng ta có thể thấy rằng cú pháp của ValueTuple rất rõ ràng và dễ hiểu.
Cách 2: Sử Dụng Tham Chiếu
Một phương pháp khác là sử dụng các từ khóa ref
và out
để truyền tham số vào hàm và trả về giá trị.
Sử Dụng ref
Khi bạn muốn trả về nhiều giá trị, bạn có thể sử dụng tham chiếu với từ khóa ref
:
csharp
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void FindMaxMin(List<int> numbers, ref int max, ref int min)
{
max = numbers.Max();
min = numbers.Min();
}
public static void Main()
{
var numbers = new List<int>{ 1, 10, 100, 99, 44, -1, 33, 99 };
int max = 0;
int min = 0;
FindMaxMin(numbers, ref max, ref min);
Console.WriteLine($"Max = {max}, Min = {min}"); // Max = 100, Min = -1
}
}
Sử Dụng out
Tương tự, bạn có thể sử dụng từ khóa out
mà không cần khởi tạo giá trị trước:
csharp
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void FindMaxMin(List<int> numbers, out int max, out int min)
{
max = numbers.Max();
min = numbers.Min();
}
public static void Main()
{
var numbers = new List<int>{ 1, 10, 100, 99, 44, -1, 33, 99 };
FindMaxMin(numbers, out int max, out int min);
Console.WriteLine($"Max = {max}, Min = {min}"); // Max = 100, Min = -1
}
}
Cách 3: Sử Dụng Class hoặc Struct
Cuối cùng, nếu bạn cần trả về nhiều giá trị, cách hiệu quả nhất là sử dụng class hoặc struct. Điều này đặc biệt hữu ích khi cần trả về nhiều hơn hai giá trị:
csharp
using System;
using System.Collections.Generic;
using System.Linq;
public class MaxMinResult
{
public int Max;
public int Min;
}
public class Program
{
public static MaxMinResult FindMaxMin(List<int> numbers)
{
return new MaxMinResult()
{
Max = numbers.Max(),
Min = numbers.Min(),
};
}
public static void Main()
{
var numbers = new List<int>{ 1, 10, 100, 99, 44, -1, 33, 99 };
var result = FindMaxMin(numbers);
Console.WriteLine($"Max = {result.Max}, Min = {result.Min}"); // Max = 100, Min = -1
}
}
Kết Luận
Trong bài viết này, chúng ta đã khám phá các phương pháp khác nhau để trả về nhiều giá trị trong C#. Mỗi cách tiếp cận có những ưu nhược điểm riêng, hãy lựa chọn phương pháp phù hợp với nhu cầu của bạn trong từng tình huống cụ thể. Hy vọng bài viết sẽ giúp bạn hiểu rõ hơn về cách xử lý vấn đề này trong C#!
source: viblo