C#-এ একটি মেথড থেকে একাধিক মান রিটার্ন করার একাধিক পদ্ধতি রয়েছে:
পদ্ধতি ১: ref প্যারামিটার
কলারের ভেরিয়েবল রেফারেন্স পাস করা হয়, মেথড আপডেট করে।
class Program {
static int ReturnMultipleUsingRef(int first, ref int second) {
second = 20;
return first;
}
static void Main() {
int a = 10;
int refValue = 0;
var result = ReturnMultipleUsingRef(a, ref refValue);
Console.WriteLine($"Ref Value: {refValue}"); // 20
Console.WriteLine($"Return Value: {result}"); // 10
Console.ReadLine();
}
}
পদ্ধতি ২: out প্যারামিটার
ref-এর মতো, কিন্তু কলারের ভেরিয়েবল ইনিশিয়ালাইজ করতে হয় না। মেথড বাধ্যতামূলকভাবে আসাইন করতে হবে।
static int ReturnMultipleUsingOut(int first, out int second) {
second = 20; // বাধ্যতামূলক
return first;
}
static void Main() {
int a = 10;
int outValue; // ইনিশিয়ালাইজ দরকার নেই
var result = ReturnMultipleUsingOut(a, out outValue);
Console.WriteLine($"Out Value: {outValue}"); // 20
Console.WriteLine($"Return Value: {result}"); // 10
}
পদ্ধতি ৩: Array রিটার্ন
static int[] ReturnArray() {
return new int[] { 1, 2 };
}
static void Main() {
var res = ReturnArray();
Console.WriteLine($"{res[0]} {res[1]}"); // 1 2
}
পদ্ধতি ৪: Tuple রিটার্ন (C# 7.0+ — প্রস্তাবিত)
সবচেয়ে ক্লিন, টাইপ-সেফ এবং পঠনযোগ্য।
static (int First, int Second) ReturnTuple() {
return (10, 20);
}
static void Main() {
var res = ReturnTuple();
Console.WriteLine($"{res.First} {res.Second}"); // 10 20
// Deconstruction
var (first, second) = ReturnTuple();
Console.WriteLine($"{first} {second}");
}
পদ্ধতি ৫: কাস্টম ক্লাস/রেকর্ড (C# 9.0+)
কমপ্লেক্স ডেটা বা পাবলিক API-র জন্য সেরা।
// Record (ইনমিউটেবল, value-based equality)
public record Result(int Sum, int Count, double Average);
static Result Calculate(int[] numbers) {
return new Result(numbers.Sum(), numbers.Length, numbers.Average());
}
তুলনা সারসংক্ষেপ
| পদ্ধতি | প্রकार | পাঠনযোগ্যতা | টাইপ সেফটি | পারফরম্যান্স | প্রস্তাবনা |
|---|---|---|---|---|---|
| ref | রেফারেন্স | কম (সাইড ইফেক্ট) | ভালো | ফাস্ট | লিগেসি/ইন্টারঅপ |
| out | আউটপুট | মধ্যম | ভালো | ফাস্ট | TryParse প্যাটার্ন |
| Array | রেফারেন্স | কম (ইন্ডেক্স ভিত্তিক) | মধ্যম | হিপ অ্যালোকেশন | সিম্পল কেস |
| Tuple | ভ্যালু (ValueTuple) | উচ্চ (নেমড) | উচ্চ | ফাস্ট (স্ট্যাক) | সাধারণ ব্যবহারের জন্য সেরা |
| Record/Class | রেফারেন্স/ভ্যালু | উচ্চ (সেমান্টিক) | উচ্চ | হিপ (রেকর্ড: স্ট্রাক্ট ও হতে পারে) | পাবলিক API, কমপ্লেক্স ডেটা |
TryParse প্যাটার্ন (out-র ক্লাসিক ব্যবহার)
public bool TryParse(string input, out int result) {
return int.TryParse(input, out result);
}
// কল:
if (TryParse("123", out int number)) {
Console.WriteLine($"Parsed: {number}");
}