একটি একক মান থেকে একটি নতুন IEnumerable <T> ক্রম তৈরির প্রিয় উপায়?


98

আমি সাধারণত অ্যারে সিনট্যাক্স ব্যবহার করে একটি মান থেকে একটি ক্রম তৈরি করি:

IEnumerable<string> sequence = new string[] { "abc" };

অথবা একটি নতুন তালিকা ব্যবহার করে। কারও কাছে একই জিনিসটি করার মতো আরও স্পষ্টভাবে উপায় আছে কিনা তা আমি শুনতে চাই।


4
কিভাবে এটি একটি খালি ক্রম?
কোডারডেনিস

এটি কেবল বিব্রতকর যে ডটনেট এর মতো কিছু এখনও নেই Enumerable.From<T>(params T[] items)
গুড নাইট নার্ড প্রাইড

উত্তর:


145

আপনার উদাহরণটি খালি ক্রম নয়, এটি একটি উপাদান সহ একটি ক্রম। আপনি করতে পারেন তারের খালি ক্রম তৈরি করতে

var sequence = Enumerable.Empty<string>();

এডিটি ওপি স্পষ্ট করে জানিয়েছে যে তারা একটি একক মান তৈরি করতে চাইছে । এই ক্ষেত্রে

var sequence = Enumerable.Repeat("abc",1);

দোহ, আমি বিরক্ত হয়েছি, দুঃখিত। আমার অর্থ একটি একক মান থেকে তৈরি করা, খালি উদাহরণ তৈরি করা নয়!
মার্সেল ল্যামোথ

এটাই কি 'উত্তর' পতাকা?
n8wrl

এই পদ্ধতিটি নতুন অ্যারে তৈরি করার চেয়ে খাঁটিভাবে কার্যকরী।
রায় টিঙ্কার

69

আপনার পরামর্শ মত আমি পছন্দ করি তবে এ্যারে টাইপ বাদ দিয়ে:

var sequence = new[] { "abc" };

4
আমি কখনই বুঝতে পারি নি যে আপনি এটি করতে পারেন। আমি মনে করি এটি পুনরাবৃত্তি ব্যবহারের চেয়ে পরিষ্কার।
মার্সেল ল্যামোথ

4
তবে এটি একটি অনুমিত নয়, এটি একটি অ্যারে!
জোডম্যান

4
@ ব্রায়ান ওয়াটস আমি এটি জানি, তবে এটি একটি আইনিউমারেবলের একটি কংক্রিট বাস্তবায়ন। প্রশ্নটি একটি অনুমিত <> (উদাহরণ না হলেও) এর জন্য জিজ্ঞাসা করছে isn't একটি পার্থক্য আছে।
জোডম্যান

প্রশ্নটি পরিবর্তন করা উচিত।
জোডম্যান

4
@ জোন্সোপলিস: এটি একটি ভিন্ন, সম্পর্কিত নয়। আপনি এটি Task.FromResultঅর্জন করতে ব্যবহার করতে পারেন ।
ব্রায়ান ওয়াটস

22

বা আরও ছোট,

string[] single = { "abc" };

আমি একটি এক্সটেনশন পদ্ধতি তৈরি করব:

public static T[] Yield<T>(this T item)
{
    T[] single = { item };
    return single;
}

বা আরও ভাল এবং খাটো, ঠিক

public static IEnumerable<T> Yield<T>(this T item)
{
    yield return item;
}

সম্ভবত Enumerable.Repeatএটি হুডের নীচে ঠিক করছে।


4
শেষটি উজ্জ্বল। নাম বাদে ... এটি ইতিমধ্যে আপনার উদাহরণের স্ট্রিংয়ের মতো ইতিবাচক বাস্তবায়নকারী ধরণের সাথে বিরোধ করবে। .SSingleItemEnumerable (), বা সহজভাবে ব্যবহার করুন। ফলন () -> "abc"। ফলন ()
ড্যানো

8
আমি মনে করি ToEnumerable আরও উপযুক্ত।
জোডম্যান

4
+1 Yieldভাল। আমিও বানিয়েছি IEnumerable<T> Yield<T>(this T source, params T[] others)
জোডরেল

আমি লাম্বদার পক্ষে পুরোপুরি ফলন শেষ করে দেওয়ার চেষ্টা করেছি কিন্তু কোনওরকম এটি কখনও সংকলিত হয়নি ... সিএফ. stackoverflow.com/questions/1217729/… ;-)।
পিটার - মনিকা

@ পিটারস্কিনিডার আপনি কীভাবে এবং কেন এটি করেছিলেন? কোড না দেখে মন্তব্য করতে পারছি না। আমি আপনাকে অনুসরণ করি বলে মনে হয় না।
নওফাল

5

অথবা কেবল একটি পদ্ধতি তৈরি করুন

public static IEnumerable<T> CreateEnumerable<T>(params T[] items)
{
    if(items == null)
        yield break;

    foreach (T mitem in items)
        yield return mitem;
}

বা

public static IEnumerable<T> CreateEnumerable<T>(params T[] items)
{
   return items ?? Enumerable.Empty<T>();
}

ব্যবহার:

IEnumerable<string> items = CreateEnumerable("single");
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.