এটি ব্যর্থ হয়
string temp = () => {return "test";};
ত্রুটি সহ
লাম্বদা এক্সপ্রেশনটিকে 'স্ট্রিং' টাইপে রূপান্তর করতে পারে না কারণ এটি কোনও প্রতিনিধি প্রকার নয়
ত্রুটির অর্থ কী এবং আমি কীভাবে এটি সমাধান করতে পারি?
এটি ব্যর্থ হয়
string temp = () => {return "test";};
ত্রুটি সহ
লাম্বদা এক্সপ্রেশনটিকে 'স্ট্রিং' টাইপে রূপান্তর করতে পারে না কারণ এটি কোনও প্রতিনিধি প্রকার নয়
ত্রুটির অর্থ কী এবং আমি কীভাবে এটি সমাধান করতে পারি?
উত্তর:
এখানে সমস্যাটি হ'ল আপনি একটি বেনামি পদ্ধতিটি সংজ্ঞায়িত করেছেন যা একটি প্রদান করে stringতবে সরাসরি এটিকে এটি নির্ধারণের চেষ্টা করছে string। এটি একটি অভিব্যক্তি যা যখন প্রার্থনা একটি উত্পাদন করে এর stringসরাসরি নয় একটি string। এটি একটি সামঞ্জস্যপূর্ণ প্রতিনিধি প্রকারে বরাদ্দ করা প্রয়োজন। এই ক্ষেত্রে সবচেয়ে সহজ পছন্দ হয়Func<string>
Func<string> temp = () => {return "test";};
এটি একটি লাইনে কিছুটা ingালাই বা ডেলিগেট কনস্ট্রাক্টর ব্যবহার করে ল্যাম্বদার ধরণটি প্রতিষ্ঠার জন্য অনুরোধের পরে করা যেতে পারে।
string temp = ((Func<string>)(() => { return "test"; }))();
string temp = new Func<string>(() => { return "test"; })();
দ্রষ্টব্য: উভয় নমুনা এক্সপ্রেশন ফর্মটিতে শর্ট করা যেতে পারে যার অভাব রয়েছে { return ... }
Func<string> temp = () => "test";
string temp = ((Func<string>)(() => "test"))();
string temp = new Func<string>(() => "test")();
Func<string> temp = () => "test";।
string temp = new Func<string>(() => "test")();
আপনি কোনও স্ট্রিং টাইপের জন্য কোনও ফাংশন প্রতিনিধি নির্ধারণের চেষ্টা করছেন । এটা চেষ্টা কর:
Func<string> temp = () => {return "test";};
আপনি এখন এইভাবে ফাংশনটি সম্পাদন করতে পারেন:
string s = temp();
"S" ভেরিয়েবলের মান এখন "পরীক্ষা" হবে।
সামান্য সহায়ক ফাংশন এবং জেনেরিকগুলি ব্যবহার করে আপনি সংকলকটি প্রকারটি অনুমান করতে এবং এটি কিছুটা ছোট করতে পারেন:
public static TOut FuncInvoke<TOut>(Func<TOut> func)
{
return func();
}
var temp = FuncInvoke(()=>"test");
পার্শ্ব দ্রষ্টব্য: আপনি অনামী প্রকারটি ফেরত দিতে সক্ষম হওয়ায় এটিও দুর্দান্ত:
var temp = FuncInvoke(()=>new {foo=1,bar=2});
একটি বেনামি পদ্ধতি একটি ফানক প্রতিনিধি ব্যবহার করে কোনও মান ফেরত দিতে পারে। এখানে একটি উদাহরণ যেখানে আমি দেখিয়েছি কীভাবে কোনও বেনামি পদ্ধতি ব্যবহার করে কোনও মান ফেরত দিতে হয়।
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Func<int, int> del = delegate (int x)
{
return x * x;
};
int p= del(4);
Console.WriteLine(p);
Console.ReadLine();
}
}
}
এটি সি # 8 ব্যবহার করে অন্য একটি উদাহরণ ( সমান্তরাল কাজগুলিকে সমর্থন করে অন্যান্য। নেট সংস্করণগুলির সাথেও কাজ করতে পারে )
using System;
using System.Threading.Tasks;
namespace Exercise_1_Creating_and_Sharing_Tasks
{
internal static class Program
{
private static int TextLength(object o)
{
Console.WriteLine($"Task with id {Task.CurrentId} processing object {o}");
return o.ToString().Length;
}
private static void Main()
{
const string text1 = "Welcome";
const string text2 = "Hello";
var task1 = new Task<int>(() => TextLength(text1));
task1.Start();
var task2 = Task.Factory.StartNew(TextLength, text2);
Console.WriteLine($"Length of '{text1}' is {task1.Result}");
Console.WriteLine($"Length of '{text2}' is {task2.Result}");
Console.WriteLine("Main program done");
Console.ReadKey();
}
}
}