2010-01-12 13 views
5

के बजाय संग्रह में तत्व को मैं कैसे अपडेट कर सकता हूं मेरे पास एक संग्रह ProductSearchResults है, नीचे विधि उस संग्रह में एक विशिष्ट उत्पाद ढूंढने और इसे अपडेट करने का इरादा रखती है। मैं ऑब्जेक्ट को अपडेट करना समाप्त करता हूं जो कि वास्तविक तत्व के बजाय संग्रह के तत्व को इंगित करता है (मुझे लगता है)संदर्भ

क्या आप कृपया मुझे यह दिखाएं कि यह कैसे ठीक से करें ताकि मैं संग्रह में वास्तविक उत्पाद को अपडेट कर सकूं

धन्यवाद

public void UpdateProductInfo(ProductInfo product) 
    { 
     var productToUpdate = this.ProductSearchResults.Where(p => p.ID == product.ID).; 

     if (productUpdate.Count() > 0) 
     { 
      var toUpdate = productToUpdate.First<ProductInfo>(); 

      toUpdate = product; 
     } 
    } 

उत्तर

14

वास्तविक तथ्य सब आप कर रहे हैं पारित कर दिया-में तर्क product पर बात करने के लिए स्थानीय चर toUpdate के संदर्भ में बदल रहा है।

चलें एक कदम पीछे की ओर ले, जब आप कार्य करें:

var toUpdate = productToUpdate.First<ProductInfo>(); 

आप अपने संग्रह (ProductSearchResults) से एक आइटम के लिए एक संदर्भ है। अब आप खुशी से उसके गुण अद्यतन कर सकते हैं, आला:

toUpdate.ProductName = product.ProductName; 
toUpdate.Price = product.Price; 
//etc.. 

हालांकि, आप जिस तरह से आप के लिए प्रयास कर रहे थे में एक अलग/नए आइटम को इंगित करने के संग्रह में itemn अद्यतन नहीं कर सकते। इस संग्रह से कि itme निकालने के लिए, और अपने नए एक है कि यदि वास्तव में है कि तुम क्या आवश्यकता जोड़ सकते हैं:

public void UpdateProductInfo(ProductInfo product) 
    { 
     var productToUpdate = this.ProductSearchResults.Where(p => p.ID == product.ID).; 

     if (productUpdate.Count() > 0) 
     { 
      var toUpdate = productToUpdate.First<ProductInfo>(); 

      this.ProductSearchResults.Remove(toUpdate); 
      this.ProductSearchResults.Add(product); 
     } 
    } 

आशा है कि मदद करता है।

+2

कहाँ एक IEnumerable जो करता है जोड़ें या तरीकों निकालें नहीं वापस आ जाएगी। इससे एक सूची बनाना एक नई सूची तैयार करेगा ताकि काम नहीं करेगा। यदि ProductSearchResults एक सूची है तो आप ढूँढें और फिर निकालें और जोड़ें का उपयोग कर सकते हैं। –

2
var productToUpdate = this.ProductSearchResults.FirstOrDefault(p => p.ID == product.ID); 

if (productUpdate != null) 
{ 
    productUpdate.Property = product.Property; 
    ...continue for other properties 
} 
0

सी # में, variable = expression; लिखने वाले चर के लिए एक नया मान निर्दिष्ट करता है। यह उस मान को प्रभावित नहीं करता है जिसे पहले उस चर द्वारा संदर्भित किया गया था।

अपने उदाहरण में, आप जो एक ProductInfo फोन करने वाले द्वारा प्रदान की है एक मूल्य product कहा जाता है, है, और एक मूल्य आप अपनी सूची है, जो आप toUpdate में संग्रहीत से मिलता है, कि आप अद्यतन करना चाहते हैं। इसमें product में मानों के आधार पर toUpdate के सदस्य फ़ंक्शन (या गुणों को असाइन करना) शामिल करना शामिल होगा।

हालांकि, मुझे लगता है कि आप वास्तव में एक उत्पाद एक डेटाबेस या कि ProductSearchResults द्वारा पहुँचा है भंडारण के अन्य प्रकार में पाए जाने वाले उत्पाद की जानकारी को अपडेट करना चाहते हैं। आपके द्वारा उपयोग किए जाने वाले स्टोरेज इंजन (या आपकी डेटा एक्सेस लेयर) शायद आपको एक निश्चित पहचानकर्ता से जुड़े ProductInfo को सहेजने के लिए एक फ़ंक्शन प्रदान करता है, इसलिए आपको केवल उस कार्य को कॉल करने की आवश्यकता है।

0

क्या आप उत्पाद में संग्रह को प्रतिस्थापित करना चाहते हैं या उस पर कुछ गुण अपडेट करना चाहते हैं? बाद मान लिया जाये कि, यहाँ एक उदाहरण है:

public void UpdateProductInfo(ProductInfo product) 
{ 
    var productToUpdate = this.ProductSearchResults.FirstOrDefault(p => p.ID == product.ID).; 
    if (productToUpdate == null) 
    { 
     // throw exception? 
    } 
    else 
    { 
     productToUpdate.Price = productInfo.Price; // for example 
    } 
} 
संबंधित मुद्दे