সি # 6 কেবল এটির জন্য একটি নতুন বৈশিষ্ট্য যুক্ত করেছে: এক্সটেনশন যুক্ত পদ্ধতিগুলি। এটি সর্বদা VB.net এর পক্ষে সম্ভব ছিল তবে এটি এখন সি # তে উপলব্ধ।
এখন আপনাকে Add()
সরাসরি আপনার ক্লাসে পদ্ধতি যুক্ত করতে হবে না , আপনি এগুলি এক্সটেনশন পদ্ধতি হিসাবে প্রয়োগ করতে পারেন। কোনও Add()
পদ্ধতির মাধ্যমে যে কোনও গণ্যমান প্রকার প্রসারিত করার সময়, আপনি এটি সংগ্রহের আরম্ভকারী এক্সপ্রেশনগুলিতে ব্যবহার করতে সক্ষম হবেন। সুতরাং আপনাকে তালিকা থেকে স্পষ্টভাবে আর বের করতে হবে না ( অন্য উত্তরে বর্ণিত হিসাবে ), আপনি কেবল এটি প্রসারিত করতে পারেন।
public static class TupleListExtensions
{
public static void Add<T1, T2>(this IList<Tuple<T1, T2>> list,
T1 item1, T2 item2)
{
list.Add(Tuple.Create(item1, item2));
}
public static void Add<T1, T2, T3>(this IList<Tuple<T1, T2, T3>> list,
T1 item1, T2 item2, T3 item3)
{
list.Add(Tuple.Create(item1, item2, item3));
}
// and so on...
}
এটি আপনাকে প্রয়োগ করে এমন কোনও শ্রেণিতে এটি করার অনুমতি দেবে IList<>
:
var numbers = new List<Tuple<int, string>>
{
{ 1, "one" },
{ 2, "two" },
{ 3, "three" },
{ 4, "four" },
{ 5, "five" },
};
var points = new ObservableCollection<Tuple<double, double, double>>
{
{ 0, 0, 0 },
{ 1, 2, 3 },
{ -4, -2, 42 },
};
অবশ্যই আপনি টিউপস সংগ্রহগুলি প্রসারিত করার মধ্যে সীমাবদ্ধ নন, এটি যে নির্দিষ্ট নির্দিষ্ট সংকলনের জন্য আপনি চান সেটি নির্দিষ্ট সংকলনের জন্য হতে পারে।
public static class BigIntegerListExtensions
{
public static void Add(this IList<BigInteger> list,
params byte[] value)
{
list.Add(new BigInteger(value));
}
public static void Add(this IList<BigInteger> list,
string value)
{
list.Add(BigInteger.Parse(value));
}
}
var bigNumbers = new List<BigInteger>
{
new BigInteger(1), // constructor BigInteger(int)
2222222222L, // implicit operator BigInteger(long)
3333333333UL, // implicit operator BigInteger(ulong)
{ 4, 4, 4, 4, 4, 4, 4, 4 }, // extension Add(byte[])
"55555555555555555555555555555555555555", // extension Add(string)
};
সি # 7 টি ভাষায় নির্মিত টিপলগুলির জন্য সমর্থন যোগ করবে, যদিও সেগুলি ভিন্ন ধরণের ( System.ValueTuple
পরিবর্তে) হবে। সুতরাং মান টিউপসগুলির জন্য ওভারলোডগুলি যুক্ত করা ভাল হবে যাতে আপনার সেগুলিও ব্যবহার করার বিকল্প রয়েছে। দুর্ভাগ্যক্রমে, দুজনের মধ্যে কোনও অন্তর্ভুক্ত রূপান্তর নেই are
public static class ValueTupleListExtensions
{
public static void Add<T1, T2>(this IList<Tuple<T1, T2>> list,
ValueTuple<T1, T2> item) => list.Add(item.ToTuple());
}
এই ভাবে তালিকার সূচনাটি আরও সুন্দর দেখাবে।
var points = new List<Tuple<int, int, int>>
{
(0, 0, 0),
(1, 2, 3),
(-1, 12, -73),
};
তবে এই সমস্ত সমস্যার মধ্য দিয়ে যাওয়ার পরিবর্তে ValueTuple
একচেটিয়াভাবে ব্যবহার করা আরও ভাল ।
var points = new List<(int, int, int)>
{
(0, 0, 0),
(1, 2, 3),
(-1, 12, -73),
};