2012-11-07 9 views
5

मैंने कुछ कस्टम क्लास (NTDropDown और NTBaseFreight) बनाए हैं जो मैं डेटा को संग्रहीत करने के लिए उपयोग करता हूं जिसे मैं डीबी से पुनर्प्राप्त करता हूं। मैंने NTBaseFreight की सूची और NTDropDown के लिए 2 सूचियों की शुरुआत की।list.add मूल वस्तु का संदर्भ जोड़ रहा है?

मैं सफलतापूर्वक List.Add उपयोग कर सकते हैं freights सूची freights जोड़ने के लिए, लेकिन जैसा कि मैंने कोड डीबग, मेरे 2 लटकती सूचियों केवल 1 NTDropDown होते हैं, हमेशा (मैं यह सोचते कर रहा हूँ कि यह एक संदर्भित है NTDropDown मान जैसे ही हैं जो समस्या, लेकिन मैं गलत क्या कर रहा हूँ)?

दूसरी पंक्ति पर एक उदाहरण देने के लिए, यदि वाहक और carrier_label"001", "MyTruckingCompany" थे और मैं frt_carriers के लिए अगर बयान पर एक को तोड़ने में कहें, दोनों frt_carriers और frt_modes मूल्यों "001", "MyTruckingCompany" साथ अपनी सूची में केवल 1 आइटम होते हैं, ... NTDropDown में वही मान।

कोड:

List<NTDropDown> frt_carriers = new List<NTDropDown>(); 
List<NTDropDown> frt_modes = new List<NTDropDown>(); 
List<NTBaseFreight> freights = new List<NTBaseFreight>(); 
NTDropDown tempDropDown = new NTDropDown(); 
NTBaseFreight tempFreight = new NTBaseFreight(); 

//....Code to grab data from the DB...removed 

while (myReader.Read()) 
{ 
    tempFreight = readBaseFreight((IDataRecord)myReader); 

    //check if the carrier and mode are in the dropdown list (add them if not) 
    tempDropDown.value = tempFreight.carrier; 
    tempDropDown.label = tempFreight.carrier_label; 
    if (!frt_carriers.Contains(tempDropDown)) frt_carriers.Add(tempDropDown); 

    tempDropDown.value = tempFreight.mode; 
    tempDropDown.label = tempFreight.mode_label; 
    if (!frt_modes.Contains(tempDropDown)) frt_modes.Add(tempDropDown); 

    //Add the freight to the list 
    freights.Add(tempFreight); 
} 
+2

ठीक है, मैंने इसे समझ लिया ... मुझे हर बार एक नया एनटीडीआरओडाउन शुरू करने की आवश्यकता है (फिर से tempDropDown का पुन: उपयोग न करें)। इसलिए, 'tempDropDown = new NTDropDrop();' प्रत्येक बार इसका उपयोग करने से पहले 'जोड़ना। क्या मुझे यह प्रश्न हटाना चाहिए? –

+0

नहीं। प्रश्न छोड़ दो। अपना खुद का प्रश्न हल करना अभी भी हर किसी के लिए उपयोगी है। – hometoast

उत्तर

9

हां, संदर्भ प्रकारों की एक सूची वास्तव में संदर्भों की एक सूची है।

आपको प्रत्येक ऑब्जेक्ट के लिए एक नया उदाहरण बनाना है जिसे आप सूची में स्टोर करना चाहते हैं।

इसके अलावा, Contains विधि संदर्भों की तुलना करता है, इसलिए एक ही डेटा वाले दो ऑब्जेक्ट बराबर नहीं माना जाता है। सूची में वस्तुओं के गुणों में एक मूल्य की तलाश करें।

if (!frt_carriers.Any(c => c.label == tempFreight.carrier_label)) { 
    NTDropDown tempDropDown = new NTDropDown { 
    value = tempFreight.carrier, 
    label = tempFreight.carrier_label 
    }; 
    frt_carriers.Add(tempDropDown); 
} 
4

tempDropDown पूरे पाश भर एक ही वस्तु है। यदि आप एक से अधिक जोड़ना चाहते हैं तो आपको इसका एक नया उदाहरण बनाना होगा।

मुझे यह पता लगाने की कोशिश कर रहा है कि आप उस tempDropDown सूची को जोड़ने के साथ क्या करने की कोशिश कर रहे हैं।

+0

हाँ, मैं उलझन में था क्योंकि यह मेरी फ्रेट ऑब्जेक्ट के साथ कोई समस्या नहीं पैदा कर रहा था, लेकिन ऐसा इसलिए है क्योंकि मुझे फ़ंक्शन पढ़ने से प्रत्येक पुनरावृत्ति को नया ऑब्जेक्ट प्राप्त हो रहा था) ... –

+0

ईमानदार होने के लिए, यह मेरा विचार नहीं था .. । जेएसओएन में माल ढुलाई की सूची वापस आती है (इसे एक ऐप द्वारा उपयोग किया जाएगा) और मुझे प्रत्येक वाहक/मोड के लिए सभी संभावित मूल्यों की एक अलग सूची बनाने के लिए कहा गया था ताकि उपयोगकर्ता परिणामों को आगे फ़िल्टर कर सके (यदि वे चाहते हैं) ... मेरे लिए, यह समझ में आएगा कि अद्वितीय मूल्यों की सूची ऐप द्वारा बनाई जाएगी ... मुझे सिर्फ माल की सूची वापस करनी चाहिए ... लेकिन ... हाँ ... –

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