0
0
Lập trình
Admin Team
Admin Teamtechmely

Cách Trả Về Nhiều Giá Trị Trong C# Một Cách Hiệu Quả

Đăng vào 2 tuần trước

• 4 phút đọc

Chủ đề:

C#KungFuTech

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 Copy
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 Copy
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 refout để 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 Copy
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 Copy
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 Copy
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

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào