سؤال

ولقد وجدت في عينات ينق MSDN في طريقة أنيق يسمى أضعاف () التي أريد استخدام. على سبيل المثال:

double[] doubles = { 1.7, 2.3, 1.9, 4.1, 2.9 }; 
double product = 
     doubles.Fold((runningProduct, nextFactor) => runningProduct * nextFactor); 

ولسوء الحظ، لا أستطيع الحصول على هذا جمع، سواء في المثال أو في التعليمات البرمجية الخاصة بي، وأنا لا يمكن أن تجد في أي مكان آخر في MSDN (مثل أساليب الإرشاد Enumerable أو صفيف) أن أذكر هذا الأسلوب. الخطأ أحصل هو العمر سهل "لا أعرف شيئا عن ذلك" الخطأ:

error CS1061: 'System.Array' does not contain a definition for 'Fold' and no 
extension method 'Fold' accepting a first argument of type 'System.Array' could 
be found (are you missing a using directive or an assembly reference?)

وأنا باستخدام أساليب أخرى التي أعتقد أنها تأتي من ينق (مثل تحديد () وأين ())، وأنا "باستخدام System.Linq"، لذلك أعتقد أن كل شيء موافق.

هل هذه الطريقة موجودة حقا في C # 3.5، وإذا كان الأمر كذلك، ماذا أفعل الخطأ؟

هل كانت مفيدة؟

المحلول

وسوف ترغب في استخدام طريقة تمديد Aggregate:

double product = doubles.Aggregate(1.0, (prod, next) => prod * next);

MSDN للحصول على مزيد من المعلومات. فإنه يتيح لك تحديد seed ثم تعبير لحساب القيم المتعاقبة.

نصائح أخرى

أضعاف (ويعرف أيضا باسم تخفيض) هو مصطلح قياسي من البرمجة الوظيفية. لأي سبب من الأسباب، أنها حصلت على اسمه الركام في LINQ.

double product = doubles.Aggregate(1.0, (runningProduct, nextFactor) => runningProduct* nextFactor);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top