2017-07-20 7 views
7

मेरे पास एक समान मूल्य है, जो सदस्यों के समान हैं, लेकिन जब मैंने उन्हें स्ट्रिंग के रूप में मुद्रित करने का प्रयास किया, तो मुझे लगता है कि यह Buy और Bid के लिए पहले परिभाषित मान का उपयोग करता है, यह Buy प्रिंट करता है, और Sell और Ask यह Sell प्रिंट करता है, लेकिन परीक्षण से पता चलता है कि ऐसा लगता है कि वे यादृच्छिक रूप से चुने गए हैं, क्योंकि यह न तो पहले और न ही सभी मानों के लिए अंतिम है। तो यह असंगतता क्यों है?एनम स्ट्रिंग मूल्य असंगत क्यों है?

Sample code:

using System; 

public enum OrderType 
{ 
    Buy, 
    Bid = Buy, 
    Sell, 
    Ask = Sell 
} 

public class Program 
{ 
    public static void Main() 
    { 
     Console.WriteLine("Hello World"); 
     OrderType o = OrderType.Buy; 
     Console.WriteLine("{0}: {1}", (int)o, o); 
     OrderType o2 = OrderType.Bid; 
     Console.WriteLine("{0}: {1}", (int)o2, o2); 
     OrderType o3 = OrderType.Sell; 
     Console.WriteLine("{0}: {1}", (int)o3, o3); 
     OrderType o4 = OrderType.Ask; 
     Console.WriteLine("{0}: {1}", (int)o4, o4); 
    } 
} 

आउटपुट:

Buy: 0 - Bid 
Bid: 0 - Bid 
Sell: 1 - Sell 
Ask: 1 - Sell 
+0

क्या आप पूछ रहे हैं कि आप हमेशा 'बोली' और 'सेल' क्यों देखते हैं या आप अलग-अलग रनों पर अलग-अलग उत्तर प्राप्त कर रहे हैं? –

+0

मेरा आसन्न सवाल यह है कि यह क्यों नहीं है ('खरीदें 'और' बेचें ') या (' बोली' और 'पूछें'), बल्कि यह दोनों के मिश्रित है। इसके अलावा मुझे अलग-अलग रनों पर अलग-अलग उत्तरों नहीं दिखाई दिए हैं, मुझे यकीन नहीं है कि क्या यह परीक्षण करने के लिए पर्याप्त समय नहीं चला है। – fluter

+3

नोट्स टू कॉलर्स में इसका उल्लेख है: https://msdn.microsoft.com/en-us/library/16c1xs4z.aspx#Remarks – Slai

उत्तर

5

बल्कि असंगत होने से, आप एक चयन का मामला होने के रूप में इस के बारे में सोच चाहिए बनाया जा रहा है मनमाने ढंग से

आपने एक enum बना दिया है जिसमें दो enum मान पूर्णांक 0 के लिए खड़े हैं, और दो मान पूर्णांक के लिए खड़े हैं 1. तो जब आप पूछें कि "enum value 0 से क्या जुड़ा हुआ है?" दो संभावित उत्तर हैं।

  • enum मूल्य घोषणा
  • में पहली प्रतीत होता है कि enum मूल्य है कि में पिछले प्रकट होता है के साथ जवाब देने के साथ जवाब देने में कोई त्रुटि
  • फेंकने:

    सी # के डिजाइनरों द्वारा इस सवाल का जवाब हो सकता है घोषणा

  • एक मनमाना मूल्य

भाषा डिजाइनरों w के साथ जवाब दे कभी-कभी बीमार "मनमाना" मार्ग जाता है क्योंकि यह अनुकूलन के लिए और अधिक जगह छोड़ देता है। उदाहरण के लिए वे एक हैश टेबल या कुछ में पूर्णांक-टू-एनम मैपिंग डाल सकते हैं और लुकअप को जो भी सबसे सुविधाजनक है उसे वापस कर सकते हैं। और यह उन्हें बाद में अपनी मानचित्रण रणनीति को बदलने और spec के सापेक्ष व्यवहार तोड़ने के बिना कुछ और वापस करने की अनुमति देता है।

यदि उन्होंने घोषणा को आदेश के प्रति संवेदनशील मूल्य बनाने के लिए भाषा परिभाषित की है, तो यह कार्यान्वयन पर थोड़ा बोझ डाल सकता है और मूल रूप से ट्रैक रखने के लिए एक और नियम के साथ समाप्त हो सकता है।

मुझे वास्तव में "मनमाना मूल्य चुनने" का उत्तर होने की उम्मीद होगी, इसलिए मुझे उम्मीद है कि सी # मेरी अपेक्षाओं के साथ फिट बैठेगा। लेकिन हम सभी अलग हैं और हां, कुछ लोग आश्चर्यचकित होंगे। :)

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