আপনার প্রশ্নটি আমি যেমন বুঝতে পেরেছি বলে মনে হচ্ছে এটি ভুল ভিত্তির উপর ভিত্তি করে। আমি যুক্তিটি পুনর্গঠন করতে পারি কিনা তা আমাকে দেখতে দিন:
- সংযুক্ত-নিবন্ধটি বর্ণনা করে যে কীভাবে স্বয়ংক্রিয়ভাবে উত্পন্ন সিকোয়েন্সগুলি একটি "অলস" আচরণ প্রদর্শন করে এবং দেখায় যে এটি কীভাবে একটি পাল্টা-স্বজ্ঞাত ফলাফলের দিকে নিয়ে যেতে পারে।
- অতএব আমি সনাক্ত করতে পারি যে আইনিউমারেবলের প্রদত্ত একটি উদাহরণ স্বয়ংক্রিয়ভাবে উত্পন্ন হয়েছে কিনা তা যাচাই করে পরীক্ষা করে এই অলস আচরণটি প্রদর্শন করছে কিনা।
- আমি কেমন করে ঐটি করি?
সমস্যাটি হ'ল দ্বিতীয় অনুমানটি মিথ্যা। এমনকি যদি আপনি সনাক্ত করতে পারেন যে প্রদত্ত আইএননামারেবল একটি পুনরুক্তিকারী ব্লক রূপান্তরের ফলাফল ছিল (এবং হ্যাঁ, এটি করার উপায় রয়েছে) এটি সহায়তা করবে না কারণ অনুমানটি ভুল। আসুন উদাহরণস্বরূপ।
class M { public int P { get; set; } }
class C
{
public static IEnumerable<M> S1()
{
for (int i = 0; i < 3; ++i)
yield return new M { P = i };
}
private static M[] ems = new M[]
{ new M { P = 0 }, new M { P = 1 }, new M { P = 2 } };
public static IEnumerable<M> S2()
{
for (int i = 0; i < 3; ++i)
yield return ems[i];
}
public static IEnumerable<M> S3()
{
return new M[]
{ new M { P = 0 }, new M { P = 1 }, new M { P = 2 } };
}
private class X : IEnumerable<M>
{
public IEnumerator<X> GetEnumerator()
{
return new XEnum();
}
// Omitted: non generic version
private class XEnum : IEnumerator<X>
{
int i = 0;
M current;
public bool MoveNext()
{
current = new M() { P = i; }
i += 1;
return true;
}
public M Current { get { return current; } }
// Omitted: other stuff.
}
}
public static IEnumerable<M> S4()
{
return new X();
}
public static void Add100(IEnumerable<M> items)
{
foreach(M item in items) item.P += 100;
}
}
ঠিক আছে, আমাদের চারটি পদ্ধতি রয়েছে। এস 1 এবং এস 2 স্বয়ংক্রিয়ভাবে সিকোয়েন্সগুলি উত্পন্ন হয়; এস 3 এবং এস 4 ম্যানুয়ালি উত্পাদিত ক্রম হয়। এখন ধরুন আমাদের কাছে রয়েছে:
var items = C.Sn(); // S1, S2, S3, S4
S.Add100(items);
Console.WriteLine(items.First().P);
এস 1 এবং এস 4 এর ফলাফল 0 হবে; প্রতিবার আপনি ক্রমটি অঙ্ক করবেন, আপনি এম তৈরির একটি নতুন রেফারেন্স পাবেন। এস 2 এবং এস 3 এর ফলাফল 100 হবে; প্রতিবার আপনি ক্রমটি গণনা করার সময়, আপনি শেষ বারের মতো এম এর একই রেফারেন্স পাবেন। সিকোয়েন্স কোডটি স্বয়ংক্রিয়ভাবে উত্পন্ন হয়েছে কিনা তা প্রশ্নে অর্থেগোনাল কিনা তা গণনা করা অবজেক্টগুলির রেফারেনশিয়াল পরিচয় আছে কি না। এই দুটি বৈশিষ্ট্য - স্বয়ংক্রিয় প্রজন্ম এবং রেফারেনশিয়াল পরিচয় - একে অপরের সাথে আসলে কিছুই করার নেই। আপনি যে নিবন্ধটির সাথে লিঙ্ক করেছেন সেগুলি তাদের কিছুটা মিশিয়ে দেয়।
যদি না একটি ক্রম প্রদানকারী সবসময় বস্তু আপ করে চাইবে যেমন নথিভুক্ত করা উল্লেখ পরিচয় , এটা যে এটা এত করে অনুমান করা বিজ্ঞতার কাজ নয়।
ICollection<T>
সমস্ত সংগ্রহ যেমন নয় তেমন একটি ভাল পছন্দ হবেList<T>
। উদাহরণস্বরূপ, অ্যারেPoint[]
প্রয়োগ করেIList<T>
তবে তা হয় নাList<T>
।