আমি পাবলিক রিলিজের উদ্দেশ্যে একটি লাইব্রেরি তৈরি করছি। এটিতে অবজেক্টের সেটগুলিতে অপারেটিংয়ের বিভিন্ন পদ্ধতি রয়েছে - সেটগুলি নতুন ফর্ম হিসাবে তৈরি, পরিদর্শন, বিভাজন এবং প্রজেক্ট করা। যদি এটি প্রাসঙ্গিক হয় তবে এটি একটি নিউ # IEnumerable
গেট প্যাকেজ হিসাবে প্রকাশের জন্য লিনিকিউ-স্টাইলের এক্সটেনশান যুক্ত একটি সি # শ্রেণির পাঠাগার ।
এই লাইব্রেরির কয়েকটি পদ্ধতিতে অসন্তুষ্টিজনক ইনপুট পরামিতি দেওয়া যেতে পারে। উদাহরণস্বরূপ, combinatoric পদ্ধতিতে, একটি পদ্ধতি সব সেট উৎপন্ন হয় এন আইটেম একটি উৎস সেট থেকে নির্মাণ করা যায় যে মি আইটেম। উদাহরণস্বরূপ, সেটটি দেওয়া হয়েছে:
1, 2, 3, 4, 5
এবং 2 এর সংমিশ্রণের জন্য জিজ্ঞাসা করে উত্পন্ন হবে:
1, 2
1, 3
1, 4
ইত্যাদি ...
5, 3
5, 4
এখন, এমন কিছু করা যা স্পষ্টভাবে সম্ভব নয়, যেমন 3 টি আইটেমের সেট দেওয়া এবং তারপরে 4 আইটেমের সংমিশ্রণের জন্য জিজ্ঞাসা করার সময় বিকল্পটি সেট করার সময় এটি কেবল প্রতিটি আইটেম একবার ব্যবহার করতে পারে।
এই পরিস্থিতিতে, প্রতিটি প্যারামিটার স্বতন্ত্রভাবে বৈধ:
- উত্স সংগ্রহটি নাল নয় এবং এতে আইটেম রয়েছে
- অনুরোধের আকারের সংমিশ্রণটি একটি ধনাত্মক ননজারো পূর্ণসংখ্যা
- অনুরোধ করা মোড (প্রতিটি আইটেম কেবল একবার ব্যবহার করুন) একটি বৈধ পছন্দ
যাইহোক, পরামিতিগুলির স্থিতি যখন একসাথে নেওয়া হয় তখন সমস্যা দেখা দেয়।
এই দৃশ্যে, আপনি কী পদ্ধতিটি একটি ব্যতিক্রম (উদাহরণস্বরূপ InvalidOperationException
) নিক্ষেপ করবেন বা খালি সংগ্রহটি প্রত্যাশা করবেন ? হয় আমার কাছে বৈধ বলে মনে হচ্ছে:
- আপনি এম আইটেমগুলির একটি সেট থেকে এন আইটেমগুলির সংমিশ্রণ তৈরি করতে পারবেন না যেখানে এন> মি আপনি কেবল একবার প্রতিটি আইটেম ব্যবহার করার অনুমতি পেয়েছেন তাই এই ক্রিয়াকলাপটিকে অসম্ভব বলে মনে করা যেতে পারে ।
InvalidOperationException
- আকার এন এর সংমিশ্রনের সেট যা এম আইটেমগুলি থেকে উত্পাদিত হতে পারে যখন এন> মি খালি সেট হয়; কোন সংমিশ্রণ উত্পাদন করা যায় না।
একটি খালি সেট জন্য যুক্তি
আমার প্রথম উদ্বেগ হ'ল আপনি যখন অজানা আকারের ডেটাসেটগুলির সাথে কাজ করছেন তখন কোনও ব্যতিক্রম আইডিয়োম্যাটিক লিনকিউ-স্টাইলের পদ্ধতিগুলির চেইন প্রতিরোধ করে। অন্য কথায় আপনি এই জাতীয় কিছু করতে চাইতে পারেন:
var result = someInputSet
.CombinationsOf(4, CombinationsGenerationMode.Distinct)
.Select(combo => /* do some operation to a combination */)
.ToList();
যদি আপনার ইনপুট সেটটি পরিবর্তনশীল আকারের হয় তবে এই কোডটির আচরণটি অনুমানযোগ্য। যদি 4 টিরও কম উপাদান থাকে .CombinationsOf()
তখন কোনও ব্যতিক্রম ছুঁড়ে ফেলা হয় someInputSet
, তবে এই কোডটি কখনও কখনও প্রি-চেকিং ছাড়াই রানটাইমে ব্যর্থ হয়। উপরের উদাহরণে এই চেকিং তুচ্ছ, তবে আপনি যদি লিনকিউ এর দীর্ঘ চেইনটির অর্ধেক অংশে এটি কল করে থাকেন তবে এটি ক্লান্তিকর হতে পারে। যদি এটি একটি খালি সেট দেয় তবে result
তা খালি হবে যা দিয়ে আপনি পুরোপুরি খুশি হতে পারেন।
একটি ব্যতিক্রম জন্য যুক্তি
আমার দ্বিতীয় উদ্বেগটি হ'ল খালি সেটটি ফিরলে সমস্যাগুলি লুকিয়ে থাকতে পারে - আপনি যদি এই পদ্ধতিটি লিনকুইয়ের চেইনের অর্ধেক অংশে কল করে থাকেন এবং এটি নিঃশব্দে একটি খালি সেট ফেরৎ দেয় তবে আপনি কিছু পদক্ষেপ পরে ইস্যুতে ছুটে যেতে পারেন, বা খালি দিয়ে নিজেকে খুঁজে পেতে পারেন ফলাফল সেট, এবং আপনার স্পষ্টভাবে ইনপুট সেটে কিছু থাকতে পারে যে কীভাবে ঘটেছিল তা স্পষ্ট নয়।
আপনি কী আশা করবেন এবং এর জন্য আপনার যুক্তি কী?