T
কোনও IEnumerable<T>
পরামিতি প্রত্যাশা করে এমন কোনও পদ্ধতির কাছে কোনও একক আইটেম পাস করার কি সাধারণ উপায় আছে ? ভাষা সি #, ফ্রেমওয়ার্ক সংস্করণ 2.0।
বর্তমানে আমি একটি সহায়ক পদ্ধতি ব্যবহার করছি (এটি নেট ২.০, তাই আমার কাছে লাইনকিউয়ের অনুরূপ কাস্টিং / প্রজেক্টিং সহায়ক সহায়তা পদ্ধতি রয়েছে) তবে এটি কেবল নির্বোধ বলে মনে হচ্ছে:
public static class IEnumerableExt
{
// usage: IEnumerableExt.FromSingleItem(someObject);
public static IEnumerable<T> FromSingleItem<T>(T item)
{
yield return item;
}
}
অন্য উপায় অবশ্যই একটি List<T>
বা একটি তৈরি এবং পপুলেট করা Array
এবং পরিবর্তে এটি পাস করা হবে IEnumerable<T>
।
[সম্পাদনা] একটি এক্সটেনশন পদ্ধতি হিসাবে এর নাম দেওয়া যেতে পারে:
public static class IEnumerableExt
{
// usage: someObject.SingleItemAsEnumerable();
public static IEnumerable<T> SingleItemAsEnumerable<T>(this T item)
{
yield return item;
}
}
আমি কি এখানে কিছু মিস করছি?
[সম্পাদনা 2] আমরা খুঁজে পেয়েছি someObject.Yield()
(নীচের মন্তব্যে @ পিটার প্রস্তাবিত হিসাবে) মূলত ব্রেভিটির জন্য এই এক্সটেনশন পদ্ধতির সেরা নাম হিসাবে দেখা গেছে, সুতরাং যদি কেউ এটি ধরতে চায় তবে এটি এক্সএমএল মন্তব্যের সাথে এখানে রয়েছে:
public static class IEnumerableExt
{
/// <summary>
/// Wraps this object instance into an IEnumerable<T>
/// consisting of a single item.
/// </summary>
/// <typeparam name="T"> Type of the object. </typeparam>
/// <param name="item"> The instance that will be wrapped. </param>
/// <returns> An IEnumerable<T> consisting of a single item. </returns>
public static IEnumerable<T> Yield<T>(this T item)
{
yield return item;
}
}
AsEnumerable
কারণ সেই নামের একটি অন্তর্নির্মিত এক্সটেনশন ইতিমধ্যে বিদ্যমান । (যখন T
প্রয়োগগুলি IEnumerable
, উদাহরণস্বরূপ string
।)
Yield
? কিছুই ব্রেভিটকে মারধর করে না।
left==null
এখানে চেক ঘৃণা করি । এটি কোডটির বিউটিটি ভেঙে দেয় এবং কোডটি আরও নমনীয় হওয়া বন্ধ করে দেয় - যদি কোনও দিন আপনি শালীন হতে পারে এমন কোনও কিছু নিয়ে একটি সিঙ্গলটন তৈরি করার দরকার পড়ে তবে কী হবে? মানে, new T[] { null }
এর মতো নয় new T[] {}
এবং কোনও কোনও দিন আপনাকে তাদের আলাদা করার প্রয়োজন হতে পারে।
if (item == null) yield break;
এখন আপনাকে নাল ছাড়ার পাশাপাশি (তুচ্ছ) নাল বস্তুর প্যাটার্নটির সুবিধা গ্রহণ বন্ধ করে দেওয়া হয়েছেIEnumerable
। (foreach (var x in xs)
খালি খালিxs
জরিমানা করে)। ঘটনাক্রমে, এই ফাংশনটি তালিকা মোনাডের মোনাডিক ইউনিটIEnumerable<T>
যা মাইক্রোসফ্টে মোনাদকে লাভ-ফেস্ট দেওয়া হয়েছে আমি অবাক হয়েছি এরকম কিছু প্রথম প্রথম কাঠামোর মধ্যে নেই।