2012-01-11 9 views
5

मेरे पास वर्तमान में एक विधि है जो कि सरल है और वक्रवैल्यू (कस्टम ऑब्जेक्ट) की एक सूची की गणना करता है, मेरे पास यह मुद्दा है कि मुझे पैरामीटर की गणना करने और वास्तव में बदलने के बिना दशमलव वापस पास करने की आवश्यकता है पैरामीटर।AddRange() और LINQ प्रतिलिपि समस्या

मैंने एक नई ऑब्जेक्ट में AddRange() को जोड़ने की कोशिश की ताकि पैरामीटर वक्र प्रभावित नहीं होगा लेकिन ऐसा लगता है कि संदर्भ अभी भी मौजूद है और ForEach() को वक्र दोनों के बाद किया जाता है, और वक्र बदल गया है।

मुझे लगता है कि यह अभी भी संदर्भित है लेकिन क्या पैरामीटर वक्र के माध्यम से गणना किए बिना इसे वक्र में जोड़ने के बिना ऐसा करने का कोई आसान तरीका है?

public decimal Multiply(List<CurveValue> curve, decimal dVal) 
{ 
    List<CurveValue> curveA = new List<CurveValue>(); 
    curveA.AddRange(curve); 

    curveA.ForEach(a => a.Value = decimal.Round(a.Value, 4) * dVal); 

    return Sum(curveA); 
} 

public decimal Sum(List<CurveValue> curveA) 
{ 
    return curveA.Sum(x => x.Value); 
} 

उत्तर

6

तुम बस the Sum method इसलिए की तरह उपयोग कर सकते हैं:

public decimal Multiply(IEnumerable<CurveValue> curve, decimal dVal) 
{ 
    return curve.Sum(a => decimal.Round(a.Value, 4) * dVal); 
} 

अद्यतन

एक और कार्यान्वयन कि मौजूदा योग पद्धति के माध्यम से गुजरता है प्रदान करना:

public decimal Multiply(IEnumerable<CurveValue> curve, decimal dVal) 
{ 
    IEnumerable<CurveValue> curveA = curve.Select(c => new Curve { Value = decimal.Round(c.Value, 4) * dVal }); 
    return Sum(curveA); 
} 

public decimal Sum(IEnumerable<CurveValue> curveA) 
{ 
    return curveA.Sum(x => x.Value); 
} 
+0

क्षमा करें, मेरा कोड अपडेट किया गया। योग सिर्फ एक तरीका है जो स्पष्ट करता है। मुझे व्यक्तिगत रूप से प्रत्येक CurveValue ऑब्जेक्ट की गणना करने की आवश्यकता है, फिर इन्हें योग करें। ऑपरेशन पक्ष ठीक है, मुझे पता नहीं है कि जब वक्र पर ऑपरेशन किया जा रहा है तो वक्र को क्यों अपडेट किया जा रहा है। – nik0lias

+2

@ nik0lias CurveA में वक्र में बिल्कुल वही ऑब्जेक्ट्स के संदर्भ शामिल हैं, इसलिए जब भी आप उन्हें बदलते हैं तब भी आप वही ऑब्जेक्ट्स से निपट रहे हैं (वक्र में। फॉरएच (...))। –

+0

वक्र को वक्र की प्रतिलिपि बनाने और संदर्भों को हटाने का कोई आसान तरीका है? या यह नई वस्तुओं को गिनाने और बनाने का एक मामला है और फिर इन्हें वक्र में जोड़ना है? – nik0lias

3

आप के रूप में एक सूची संग्रह का उपयोग कर रहे हैं, आप चयन एक्सटेंशन विधि का उपयोग करने में सक्षम हैं। यह विधि एक पैरामीटर प्रदान करती है जहां आप अपनी सूची में प्रत्येक तत्व के लिए एक रूपांतरण फ़ंक्शन को परिभाषित करते हैं और एक आईनेमरेबल लौटाता है जहां टी आपके फ़ंक्शन पर निर्दिष्ट प्रकार है।

आशा है कि यह मदद करता है :)

3

इसमें कुछ समय ओल्ड-स्कूल हो सकता है, लेकिन क्यों आप बिल्कुल रेंज कॉपी कर रहे हैं?

आप वक्र पर फिर से सक्रिय हो सकते हैं, और गणना मूल्य को परिणाम सूची में डाल सकते हैं, फिर मूल्यों को जोड़ सकते हैं।

List<CurveValue> curveA = new List<CurveValue>();   
curve.ForEach(a => curveA.Add(new CurveValue {Value = decimal.Round(a.Value, 4) * dVal });   

return Sum(curveA); 

कोड की जांच न करने के लिए खेद है, मैं यहां अपनी नेटबुक पर हूं। मुझे आशा है कि आपको मेरा मतलब मिल जाएगा।

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