এটি সি # 7.3 (ফ্রেমওয়ার্ক 4.8) এ সঠিকভাবে সংকলন করেছে:
(string, string) s = ("a", "b");
(object, string) o = s;
আমি জানি যে এটি নিম্নলিখিতগুলির জন্য সিনট্যাকটিক চিনি, যা সঠিকভাবে সংকলন করে:
ValueTuple<string, string> s = new ValueTuple<string, string>("a", "b");
ValueTuple<object, string> o = s;
সুতরাং, এটা মনে হয় যে ValueTuples নিয়োগ করা যেতে পারে covariantly , যা সন্ত্রস্ত !
দুর্ভাগ্যক্রমে, আমি বুঝতে পারছি না কেন : আমি এই ছাপে ছিলাম যে সি # কেবল ইন্টারফেস এবং প্রতিনিধিদের মধ্যে স্ববিরোধিতা সমর্থন করে । ValueType
না হয়।
আসলে, যখন আমি আমার নিজস্ব কোড দিয়ে এই বৈশিষ্ট্যটির সদৃশ করার চেষ্টা করি, তখন আমি ব্যর্থ হই:
struct MyValueTuple<A, B>
{
public A Item1;
public B Item2;
public MyValueTuple(A item1, B item2)
{
Item1 = item1;
Item2 = item2;
}
}
...
MyValueTuple<string, string> s = new MyValueTuple<string, string>("a", "b");
MyValueTuple<object, string> o = s;
// ^ Cannot implicitly convert type 'MyValueTuple<string, string>' to 'MyValueTuple<object, string>'
সুতরাং, কেন ValueTuple
সমবায়ভাবে বরাদ্দ করা যেতে পারে, তবে এসগুলি MyValueTuple
পারে না?
ValueTuple<object, string> o = new ValueTuple<object, string>(s.Item1, s.Item2);
public static implicit operator MyValueTuple<A, B>(MyValueTuple<string, string> v) { throw new NotImplementedException(); }
কার্যনির্বাহী অপারেটরটিকে তার কার্য-ডিকনস্ট্রাকচার যুক্ত করুন। এছাড়াও, উপায় দ্বারা দুর্দান্ত প্রশ্ন!
null
একটি থেকেNullable<T>
যদিও এটি একটি struct আছে।