ল্যাম্বডা ফাংশনটি ঘোষণা করা এবং তাত্ক্ষণিকভাবে এটি কল করা সম্ভব:
Func<int, int> lambda = (input) => { return 1; };
int output = lambda(0);
আমি ভাবছি এক লাইনে এটি করা সম্ভব কিনা, উদাহরণস্বরূপ কিছু
int output = (input) => { return 1; }(0);
যা একটি সংকলক ত্রুটি দেয় "পদ্ধতিটির নাম প্রত্যাশিত"। Castালাই Func<int, int>কাজ করাও কাজ করে না:
int output = (Func<int, int>)((input) => { return 1; })(0);
একই ত্রুটি দেয় এবং নীচে উল্লিখিত কারণগুলির জন্য আমি ইনপুট আর্গুমেন্টের ধরণ (প্রথমটি int) স্পষ্টভাবে উল্লেখ না করা এড়াতে চাই ।
আপনি সম্ভবত ভাবছেন যে আমি কোডটি সরাসরি এম্বেড করার পরিবর্তে কেন এটি করতে চাই int output = 1;। কারণটি নিম্নরূপ: আমি একটি এসওএপি ওয়েবসার্চিসহ একটি রেফারেন্স তৈরি করেছি svcutil, যা নেস্টেড উপাদানগুলির কারণে অত্যন্ত দীর্ঘ শ্রেণীর নাম উত্পন্ন করে, যা আমি টাইপ করতে এড়াতে চাই। পরিবর্তে তাই
var o = await client.GetOrderAsync(request);
return new Order {
OrderDate = o.OrderDate,
...
Shipments = o.Shipment_Order == null ? new Shipment[0]
o.Shipment_Order.Select(sh => new Shipment {
ShipmentID = sh.ShipmentID,
...
Address = CreateAddress(sh.ReceiverAddress_Shipment);
}).ToArray()
};
এবং একটি পৃথক CreateAddress(GetOrderResultOrderShipment_OrderShipmentShipment_Address address)পদ্ধতি (আসল নামগুলি আরও দীর্ঘ, এবং ফর্মটি সম্পর্কে আমার খুব সীমিত নিয়ন্ত্রণ আছে), আমি লিখতে চাই
var o = await client.GetOrderAsync(request);
return new Order {
OrderDate = o.OrderDate,
...
Shipments = o.Shipment_Order == null ? new Shipment[0]
o.Shipment_Order.Select(sh => new Shipment {
ShipmentID = sh.ShipmentID,
...
Address = sh.ReceiverAddress_Shipment == null ? null : () => {
var a = sh.ReceiverAddress_Shipment.Address;
return new Address {
Street = a.Street
...
};
}()
}).ToArray()
};
আমি জানি আমি লিখতে পারি
Address = sh.ReceiverAddress_Shipment == null ? null : new Address {
Street = sh.ReceiverAddress_Shipment.Address.Street,
...
}
এমনকি sh.ReceiverAddress_Shipment.Addressযদি অনেক ক্ষেত্র থাকে তবে তা ( অংশ) খুব পুনরাবৃত্ত হয়। ল্যাম্বডা ঘোষণা করা এবং ততক্ষণে এটি কল করা আরও মার্জিত কম অক্ষর লিখতে হবে।
public T Exec<T>(Func<T> func) => return func();এবং এটির মতো ব্যবহার করুন: এটি int x = Exec(() => { return 1; });আমার সমস্ত প্যারেন্স সহ কাস্টিংয়ের চেয়ে অনেক ভাল পড়ে reads
int output = ((Func<int>) (() => { return 1; }))();