আমি ভাবছিলাম যে কেউ কী Func<int, string>
কী এবং কীভাবে এটি কিছু পরিষ্কার উদাহরণ দিয়ে ব্যবহার করা হয় তা ব্যাখ্যা করতে পারে ।
উত্তর:
আপনি সাধারণত প্রতিনিধিদের সাথে পরিচিত? ডেলিগেটস এবং ইভেন্টগুলি সম্পর্কে আমার একটি পৃষ্ঠা রয়েছে যা যদি না সহায়তা করতে পারে তবে এটি উভয়ের মধ্যে পার্থক্য ব্যাখ্যা করার জন্য আরও তত্পর।
Func<T, TResult>
কেবলমাত্র একটি জেনেরিক প্রতিনিধি - ঘোষণাপত্রের সাথে সম্পর্কিত ধরণের আর্গুমেন্ট ( এবং ) প্রকারের পরামিতিগুলি ( T
এবং TResult
) প্রতিস্থাপন করে কোনও নির্দিষ্ট পরিস্থিতিতে এর অর্থ কী তা নিয়ে কাজ করুন । বিভ্রান্তি এড়াতে আমি এর নামও দিয়েছি:int
string
string ExpandedFunc(int x)
অন্য কথায়, Func<int, string>
একটি প্রতিনিধি যা কোনও int
আর্গুমেন্ট গ্রহণ করে এবং ফিরিয়ে দেয় এমন একটি ফাংশনকে প্রতিনিধিত্ব করে string
।
Func<T, TResult>
অনুমান এবং পূর্বাভাসের জন্য প্রায়শই লিনকিউতে ব্যবহৃত হয় (পরবর্তী ক্ষেত্রে TResult
সর্বদা সর্বদা bool
)। উদাহরণস্বরূপ, আপনি Func<int, string>
একটি স্ট্রিংয়ের অনুক্রমের সাথে পূর্ণসংখ্যার ক্রমটি প্রজেক্ট করতে ব্যবহার করতে পারেন । লাম্বডা এক্সপ্রেশনগুলি সাধারণত লিনকিউতে প্রাসঙ্গিক প্রতিনিধি তৈরি করতে ব্যবহৃত হয়:
Func<int, string> projection = x => "Value=" + x;
int[] values = { 3, 7, 10 };
var strings = values.Select(projection);
foreach (string s in strings)
{
Console.WriteLine(s);
}
ফলাফল:
Value=3
Value=7
Value=10
একটি Func<int, string>
ints খায় এবং স্ট্রিং প্রদান করে। সুতরাং, কী কী খায় এবং স্ট্রিংগুলি ফেরত দেয়? এই সম্পর্কে ...
public string IntAsString( int i )
{
return i.ToString();
}
সেখানে, আমি সবেমাত্র একটি ফাংশন করেছি যা ints খায় এবং স্ট্রিংগুলি ফেরত দেয়। আমি কীভাবে এটি ব্যবহার করব?
var lst = new List<int>() { 1, 2, 3, 4, 5 };
string str = String.Empty;
foreach( int i in lst )
{
str += IntAsString(i);
}
// str will be "12345"
খুব সেক্সি নয়, আমি জানি, তবে এটি সহজ ধারণা যে প্রচুর কৌশল অবলম্বন করা হয়। এখন, এর পরিবর্তে একটি ফানক ব্যবহার করা যাক।
Func<int, string> fnc = IntAsString;
foreach (int i in lst)
{
str += fnc(i);
}
// str will be "1234512345" assuming we have same str as before
প্রতিটি সদস্যকে ইনএএসস্ট্রিং কল করার পরিবর্তে, আমি এফএনসি নামে একটি রেফারেন্স তৈরি করেছি (পদ্ধতিগুলির এই উল্লেখগুলিকে প্রতিনিধি বলা হয় ) এবং পরিবর্তে এটি ব্যবহার করেছি। (মনে রাখবেন fnc ইনট খায় এবং স্ট্রিংগুলি দেয়)।
এই উদাহরণটি খুব সেক্সি নয়, তবে আপনি দেখতে পাবেন এক টন চালাক স্টাফগুলি ফাংশন, ডেলিগেটস এবং এক্সটেনশন পদ্ধতির সাধারণ ধারণার উপর ভিত্তি করে ।
আমি দেখেছি এই স্টাফের সেরা প্রাইমারগুলির মধ্যে একটি এখানে । তিনি আরও অনেক বাস্তব উদাহরণ পেয়েছেন। :)
এটি এমন একটি প্রতিনিধি যা একজনকে int
প্যারামিটার হিসাবে নেয় এবং ধরণের মান দেয় string
।
এটির ব্যবহারের উদাহরণ এখানে:
using System;
class Program
{
static void Main()
{
Func<Int32, String> func = bar;
// now I have a delegate which
// I can invoke or pass to other
// methods.
func(1);
}
static String bar(Int32 value)
{
return value.ToString();
}
}
Func<int, string>
কোন মান মান প্যারামিটার গ্রহণ করে এবং একটি স্ট্রিংয়ের মান দেয়। এখানে একটি উদাহরণ যেখানে অতিরিক্ত সমর্থন পদ্ধতি অপ্রয়োজনীয়।
Func<int, string> GetDogMessage = dogAge =>
{
if (dogAge < 3) return "You have a puppy!";
if (dogAge < 7) return "Strong adult dog!";
return "Age is catching up with the dog!";
};
string youngDogMessage = GetDogMessage(2);
দ্রষ্টব্য: ফানকের সর্বশেষ অবজেক্টের ধরণ (উদাহরণস্বরূপ "স্ট্রিং" এই ফাংশন) হ'ল ফাংশন রিটার্ন টাইপ (যেমন আদিমগুলিতে সীমাবদ্ধ নয়, তবে কোনও বস্তু)। অতএব, Func<int, bool, float>
ইনট এবং বুল মান প্যারামিটারগুলি গ্রহণ করে এবং একটি ভাসমান মান প্রদান করে।
Func<int, bool, float> WorthlessFunc = (intValue, boolValue) =>
{
if(intValue > 100 && boolValue) return 100;
return 1;
};
float willReturn1 = WorthlessFunc(21, false);
float willReturn100 = WorthlessFunc(1000, true);
এইচটিএইচ