2017-10-18 15 views
5

नया ValueTuple प्रकार सी # 7 में IComparable लागू करें, लेकिन केवल documentation मैं इस बस के कार्यान्वयन को खोजने में सक्षम हूं कि CompareTo का रिटर्न वैल्यू सॉर्ट ऑर्डर में "रिश्तेदार स्थिति" को इंगित करता है। यह नहीं बताता कि "क्रमबद्ध क्रम" वास्तव में क्या है।क्या सिस्टम का क्रम क्रम है। वैल्यू टुप आधिकारिक तौर पर निर्दिष्ट है, और कहां?

स्रोत की जांच करके, मैं पा सकता हूं कि ऑर्डर वह है जो मैं उम्मीद करता हूं - यह पहले फ़ील्ड को अपने डिफ़ॉल्ट Comparer द्वारा तुलना करने के लिए प्रतिनिधि करता है, फिर संबंधों को तोड़ने के लिए, एक समय में अन्य फ़ील्ड का उपयोग करके। मैं गारंटी के बिना इस पर निर्भर नहीं करना चाहूंगा कि इसे कार्यान्वयन विवरण नहीं माना जाता है जो विनिर्देशन का उल्लंघन किए बिना बदल सकता है।

क्या यह व्यवहार वास्तव में कहीं भी दस्तावेज है?

+0

प्रदान कर सकते हैं। केवल एक चीज जो मैं कह सकता हूं वह है कि 'System.ValueTuple'' System.Tuple' के समान सम्मेलनों का पालन करता है, इसलिए आप देखना चाहते हैं कि वह दस्तावेज किया गया था या नहीं। –

+1

मुझे लगता है कि यह स्क्वायरली "कुछ और समझ में आता है" सहजता से फिट बैठता है। –

उत्तर

6

source code के अनुसार, CompareTo डिफ़ॉल्ट comparers

public int CompareTo(ValueTuple<T1, T2, T3> other) 
    { 
     int c = Comparer<T1>.Default.Compare(Item1, other.Item1); 
     if (c != 0) return c; 

     c = Comparer<T2>.Default.Compare(Item2, other.Item2); 
     if (c != 0) return c; 

     return Comparer<T3>.Default.Compare(Item3, other.Item3); 
    } 

की Compare तरीकों कॉल लेकिन आप स्पष्ट रूप से एक ग्राहक comparer

int IStructuralComparable.CompareTo(object other, IComparer comparer) 
नहीं मेरी जानकारी के लिए
+0

स्रोत कोड विनिर्देश या दस्तावेज़ीकरण नहीं है, जब तक यह एक दस्तावेज़ टिप्पणी में न हो। इस मामले में – Douglas

+2

@ डगलस यह विशेष रूप से एक सी # संस्करण से अगले तक विकसित होता है। सी # 6 विनिर्देश अभी खत्म हो गया था, सी # 7 चश्मे प्रगति पर एक काम हैं और हम सी # 7.2 में पहले से ही –

+0

@ डगलस हैं, पूरी तरह से असहमत हैं। कोड दस्तावेज का प्राथमिक स्रोत है; यह एकमात्र दस्तावेज है जो स्पष्ट रूप से वर्णन करता है कि परिणामस्वरूप ऐप या लाइब्रेरी क्या करती है। और [परीक्षण] (https://github.com/dotnet/corefx/blob/master/src/System.ValueTuple/tests/ValueTupleTests.cs) यह विनिर्देश हैं कि इसे क्या करना चाहिए। बाकी सब कुछ पूरक है और सिंक से बाहर होने का जोखिम और इस प्रकार गलत है। –

संबंधित मुद्दे