سؤال

لقد حصلت على واحدة بسيطة أخرى (على ما أظن) هذا الأمر. لقد كتبت طريقة في أحد أدوات التحكم الخاصة بي التي تحصل على أحدث إصدار من ملف في CMS نظرًا لاسم الملف (أي بغض النظر عن المجلد الموجود في الملف). لقد وجدت أنه من المفيد بما فيه الكفاية أنني اعتقدت أنني سأخطوها في فصل CMStoolbox الخاص بي ، لكن عندما أفعل ذلك ، لم يعد بإمكاني استخدام Where() طريقة فئة FileManager التي توفرها CMS (التي تُرجع قائمة).

إليك مثال مبسط على صفي:

using System;
using System.Collections.Generic;
using CMS.CMS;
using CMS.Core;
using CMS.Web;

namespace CoA.CMS {
    public class ToolBox
    {
        public CMS.CMS.File getLatestFileVersionByFilename(string filename, int GroupID)
        {
            IList<CMS.CMS.File> fileWithName = FileManager.GetGroupAll(false, GroupID).Where(file => currentFileVersionIsNamed(file, filename)).ToList<CMS.CMS.File>();
            return getLatestFileFromListOfFiles(fileWithName);

        }
        protected bool currentFileVersionIsNamed(CMS.CMS.File file, string name)
        {
        }
        protected CMS.CMS.File  getLatestFileFromListOfFiles(CMS.CMS.File file)
        {
        }
    }
}

عندما أفعل نفس الشيء بالضبط في سياق عنصر التحكم (فئة حقًا مقدمة من CMS التي تمتد Control) لدي إمكانية الوصول إلى Where() الطريقة ، لكن في فئة أدواتك ، لا أفعل. ما يعطي؟ اعتقدت أن IList سيسمح دائمًا للوصول إلى نفس الطرق من أي مكان تستخدمه.

أنا مخطئ مرة أخرى ، هاها :)


تعديل: Filemanager.GetGroupAll() إرجاع أ CMSList الذي يمتد IList

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

المحلول

أنت بحاجة إلى توجيه ل System.Linq. .Where() هي طريقة تمديد على IEnumerable<T> (أيّ IList<T> الأدوات) التي يتم تعريفها في مساحة الاسم.

نصائح أخرى

كان جويل الأول ، ولكن للتوسع في ذلك: أين () طريقة التمديد. أساليب التمديد هي طرق ثابتة تتصرف مثل الأساليب الحقيقية ، ويُعلن مثل هذا:

static class NameNeverUsed
{
    public static void AnExtensionMethod(this string x)
    {
    }
}

ودعا مثل:

"hello".AnExtensionMethod();

إنهم بحاجة إلى الاستيراد باستخدام عبارات مثل أي شيء آخر. لذا ، على عكس Java/C ++ ، يمكن أن يكون لدى الفصل طرقًا خارجها.

IIRC ، That. Where Method هي جزء من LINQ ، وتحتاج إلى إضافة تلك التي تستخدم عبارات في فصلك للحصول على طرق التمديد لواجهة IEUMABLY.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top