অন্যরা ইতিমধ্যে উল্লেখ করেছে যে অসম্ভবভাবে সম্ভব অনেক প্রতিনিধি প্রকার রয়েছে যা আপনি বোঝাতে পারতেন ; তাই বিশেষ সম্পর্কে কি Func
এটি পরিবর্তে ডিফল্ট হতে দাবী Predicate
বা Action
বা অন্য কোন সম্ভাবনা? এবং, লাম্বদাসের জন্য, কেন এটি স্পষ্ট যে অভিপ্রায় গাছের ফর্মের চেয়ে প্রতিনিধি ফর্মটি বেছে নেওয়ার উদ্দেশ্য?
তবে আমরা বলতে পারি যে Func
এটি বিশেষ, এবং লাম্বদা বা বেনামে পদ্ধতির অনুমিত ধরণটি কোনও কিছুর ফানক। আমাদের এখনও সব ধরণের সমস্যা আছে। নিম্নলিখিত মামলার জন্য আপনি কোন ধরণের অনুমিত হতে চান?
var x1 = (ref int y)=>123;
এমন কোনও Func<T>
ধরণের নেই যা কোনও রেফ নেয়।
var x2 = y=>123;
আমরা ফর্মাল প্যারামিটারের ধরণটি জানি না, যদিও আমরা রিটার্নটি জানি। (বা আমরা কি? রিটার্নটি কি দীর্ঘ? সংক্ষিপ্ত? বাইট?)
var x3 = (int y)=>null;
আমরা রিটার্নের ধরণ জানি না, তবে এটি বাতিল হওয়া যায় না। রিটার্নের ধরণটি কোনও রেফারেন্স টাইপ বা কোনও মূল্যহীন মান প্রকার হতে পারে।
var x4 = (int y)=>{ throw new Exception(); }
আবার, আমরা রিটার্নের ধরণটি জানি না এবং এবার এটি বাতিল হতে পারে।
var x5 = (int y)=> q += y;
এটি কি শূন্য-প্রত্যাবর্তনকারী বিবৃতি ল্যাম্বদা বা এমন কিছু যা Q এর জন্য নির্ধারিত মানটি ফেরত দেয়? উভয়ই আইনী; আমাদের কোনটি বেছে নেওয়া উচিত?
এখন, আপনি বলতে পারেন, ভাল, কেবল এই বৈশিষ্ট্যগুলির কোনওটিকে সমর্থন করবেন না। কেবলমাত্র "সাধারণ" কেসগুলিতে সমর্থন করুন যেখানে ধরণের কাজগুলি করা যায়। যে সাহায্য করে না। এটি কীভাবে আমার জীবনকে সহজ করে তোলে? যদি বৈশিষ্ট্যটি কখনও কখনও কাজ করে এবং কখনও কখনও ব্যর্থ হয় তবে আমাকে এখনও সেই ব্যর্থতার সমস্ত পরিস্থিতি সনাক্ত করতে কোডটি লিখতে হবে এবং প্রত্যেকটির জন্য একটি অর্থবহ ত্রুটির বার্তা দিতে হবে। আমাদের এখনও সেই সমস্ত আচরণ নির্দিষ্ট করতে হবে, এটি নথিভুক্ত করতে হবে, এর জন্য পরীক্ষা লিখতে হবে ইত্যাদি so এটি একটি খুব ব্যয়বহুল বৈশিষ্ট্য যা ব্যবহারকারীর সংরক্ষণ করতে পারে সম্ভবত অর্ধ ডজন কীস্ট্রোক। অর্ধেক সময় কাজ করে না এবং এটি যে ক্ষেত্রে কাজ করে সেখানে কোনও লাভই সরবরাহ করে না এমন বৈশিষ্ট্যের জন্য পরীক্ষার কেসগুলি লেখার জন্য অনেক সময় ব্যয় করার চেয়ে আমাদের কাছে ভাষাটির মূল্য যুক্ত করার আরও ভাল উপায় রয়েছে।
পরিস্থিতি যেখানে এটি আসলে কার্যকর তা হ'ল:
var xAnon = (int y)=>new { Y = y };
কারণ সেই জিনিসটির জন্য কোনও "স্পিকারে" টাইপ নেই। তবে আমাদের সর্বদা এই সমস্যাটি রয়েছে এবং আমরা প্রকারটি অনুমিত করতে কেবল পদ্ধতি ধরণের অনুক্রম ব্যবহার করি:
Func<A, R> WorkItOut<A, R>(Func<A, R> f) { return f; }
...
var xAnon = WorkItOut((int y)=>new { Y = y });
এবং এখন পদ্ধতি টাইপ অনুমানটি ফানক প্রকারটি কী তা বোঝায়।
Func<>
16 টি আর্গুমেন্ট গ্রহণ করে।