না, তবে আপনি Action
বিকল্প হিসাবে কোনও প্রতিনিধি (উদাহরণ ) ব্যবহার করতে পারেন ।
রবিন আর এর উত্তরে কিছুটা অনুপ্রাণিত হয়ে এমন পরিস্থিতির মুখোমুখি হয়েছিল যখন আমি ভেবেছিলাম যে আমি একটি optionচ্ছিক প্যারামিটার চাইছি, পরিবর্তে আমি একটি Action
প্রতিনিধি ব্যবহার করেছি । Action<int>
পার্থক্য এবং সাদৃশ্য দেখানোর জন্য ব্যবহারের জন্য পরিবর্তন করতে আমি তার উদাহরণ কোড ধার নিয়েছি :
public string foo(string value, Action<int> outResult = null)
{
// .. do something
outResult?.Invoke(100);
return value;
}
public void bar ()
{
string str = "bar";
string result;
int optional = 0;
// example: call without the optional out parameter
result = foo (str);
Console.WriteLine ("Output was {0} with no optional value used", result);
// example: call it with optional parameter
result = foo (str, x => optional = x);
Console.WriteLine ("Output was {0} with optional value of {1}", result, optional);
// example: call it with named optional parameter
foo (str, outResult: x => optional = x);
Console.WriteLine ("Output was {0} with optional value of {1}", result, optional);
}
এটির সুবিধাটি রয়েছে যে sourceচ্ছিক পরিবর্তনশীল উত্সটিতে একটি সাধারণ int হিসাবে উপস্থিত হয় (সংকলকটি এটি একটি ক্লোজার ক্লাসে গুটিয়ে রাখে, পরিবর্তে আমাদের এটি ব্যবহারকারী-সংজ্ঞায়িত শ্রেণিতে স্পষ্টভাবে আবৃত করে)।
চলকটির সুস্পষ্ট সূচনা প্রয়োজন কারণ সংকলকটি ধরে নিতে পারে না যে Action
ফাংশন কলটি প্রস্থান করার আগে ডাকা হবে।
এটি সমস্ত ব্যবহারের ক্ষেত্রে উপযুক্ত নয়, তবে আমার আসল ব্যবহারের ক্ষেত্রে (একটি ফাংশন যা ইউনিট পরীক্ষার জন্য ডেটা সরবরাহ করে এবং যেখানে কোনও নতুন ইউনিট পরীক্ষার জন্য কিছু অভ্যন্তরীণ অবস্থানে রিটার্নের মান উপস্থিত না হওয়া প্রয়োজন ছিল) এর জন্য ভাল কাজ করেছে।