একটি সি # ল্যাম্বডা এক্সপ্রেশন একটির বেশি বিবৃতি অন্তর্ভুক্ত করতে পারে?
(সম্পাদনা করুন: নীচের বেশ কয়েকটি উত্তরে যেমন উল্লেখ করা হয়েছে, এই প্রশ্নটি মূলত "বক্তব্য" না দিয়ে "লাইন" সম্পর্কে জিজ্ঞাসা করেছিল))
একটি সি # ল্যাম্বডা এক্সপ্রেশন একটির বেশি বিবৃতি অন্তর্ভুক্ত করতে পারে?
(সম্পাদনা করুন: নীচের বেশ কয়েকটি উত্তরে যেমন উল্লেখ করা হয়েছে, এই প্রশ্নটি মূলত "বক্তব্য" না দিয়ে "লাইন" সম্পর্কে জিজ্ঞাসা করেছিল))
উত্তর:
(আমি ধরে নিচ্ছি আপনি সত্যিই একাধিক লাইনের পরিবর্তে একাধিক বক্তব্য সম্পর্কে কথা বলছেন))
আপনি ব্রেস ব্যবহার করে ল্যাম্বডা এক্সপ্রেশনটিতে একাধিক স্টেটমেন্ট ব্যবহার করতে পারেন, তবে কেবল সিনট্যাক্স যা ব্রেস ব্যবহার করে না সেগুলি এক্সপ্রেশন ট্রিতে রূপান্তরিত হতে পারে:
// Valid
Func<int, int> a = x => x + 1;
Func<int, int> b = x => { return x + 1; };
Expression<Func<int, int>> c = x => x + 1;
// Invalid
Expression<Func<int, int>> d = x => { return x + 1; };
ল্যাম্বডা এক্সপ্রেশনটিতে আপনি যতটা নতুন লাইন রাখতে চান তেমন রাখতে পারেন; সি # নিউলাইনগুলিকে উপেক্ষা করে।
আপনি সম্ভবত একাধিক বক্তব্য সম্পর্কে জিজ্ঞাসা করতে চেয়েছিলেন ।
একাধিক বিবৃতি ব্রেস মধ্যে আবৃত করা যেতে পারে।
ডকুমেন্টেশন দেখুন ।
যেহেতু সি # 7:
একক লাইন বিবৃতি:
int expr(int x, int y) => x + y + 1;
একাধিক বক্তব্য:
int expr(int x, int y) { int z = 8; return x + y + z + 1; };
যদিও এগুলিকে স্থানীয় ফাংশন বলা হয় আমি মনে করি এটি নীচের চেয়ে কিছুটা পরিষ্কার দেখাচ্ছে এবং কার্যকরভাবে একই
Func<int, int, int> a = (x, y) => x + y + 1;
Func<int, int, int> b = (x, y) => { int z = 8; return x + y + z + 1; };
Func<string, bool> test = (name) =>
{
if (name == "yes") return true;
else return false;
}
থেকে ল্যামডা প্রকাশ (গ # প্রোগ্রামিং গাইড) :
একটি বিবৃতি ল্যাম্বডা এর শরীরে বহু সংখ্যক বিবৃতি থাকতে পারে; তবে, বাস্তবে সাধারণত দুটি বা তিনটির বেশি হয় না।
সি # 7.0 এর সাহায্যে আপনি এটির মতোও ব্যবহার করতে পারেন
Public string ParentMethod(int i, int x){
int calculation = (i*x);
(string info, int result) InternalTuppleMethod(param1, param2)
{
var sum = (calculation + 5);
return ("The calculation is", sum);
}
}
আপনার একটি ক্লাস আছে বলে দিন:
public class Point
{
public int X { get; set; }
public int Y { get; set; }
}
এই শ্রেণীর ভিতরে C # 7.0 এর সাহায্যে আপনি কোঁকড়ানো বন্ধনী ছাড়াই এটি করতে পারেন:
Action<int, int> action = (x, y) => (_, _) = (X += x, Y += y);
এবং
Action<int, int> action = (x, y) => _ = (X += x, Y += y);
যেমন হবে:
Action<int, int> action = (x, y) => { X += x; Y += y; };
এটি যদি আপনার একটি লাইনে নিয়মিত পদ্ধতি বা নির্মাণকারীর লেখার প্রয়োজন হয় বা যখন আপনার আরও বেশি প্রয়োজন হয় তবে একটি বিবৃতি / অভিব্যক্তিটি একটি অভিব্যক্তিতে প্যাক করার প্রয়োজন হলে এটি সহায়ক হতে পারে:
public void Action(int x, int y) => (_, _) = (X += x, Y += y);
অথবা
public void Action(int x, int y) => _ = (X += x, Y += y);
অথবা
public void Action(int x, int y) => (X, Y) = (X + x, Y + y);
ডকুমেন্টেশনে টিপলগুলির ডিকনস্ট্রাকশন সম্পর্কে আরও ।