سؤال

عندما كتبت هذا السؤال لأول مرة، قمت بذلك من أجل العثور على الأسئلة المكررة، مع التأكد من أن شخصًا ما قد طرح هذا السؤال بالفعل.كانت خطتي هي اتباع تلك الروابط المخادعة بدلاً من نشر هذا السؤال.لكن هذا السؤال لم يُطرح من قبل على ما أرى..ولم يظهر في قائمة "الأسئلة ذات الصلة".

ما هي بعض أفضل الموارد التي وجدتها (المقالات والكتب ومنشورات المدونات وما إلى ذلك) لاكتساب فهم متعمق لأشجار التعبير في لغة C#؟ مازلت أتفاجأ بقدراتهم، والآن وصلت إلى النقطة التي أقول فيها، "حسنًا، يكفي مفاجأة.أريد أن أتوقف الآن وأحصل على درجة الدكتوراه في هذه الأشياء." أبحث عن المواد التي تغطي القدرات بشكل منهجي ومنهجي ثم أتناول أمثلة تفصيلية لما يمكنك فعله بها.

ملحوظة:أنا لا أتحدث عن تعبيرات لامدا.أنا أتحدث عن Expression<T> وكل الأشياء التي تأتي معه وتنشأ عنه.

شكرًا.

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

المحلول

الفصل 11 (داخل أشجار التعبير) والفصل 12 (توسيع Linq) من برمجة Microsoft Linq (ISBN 13:978-0-7356-2400-9 أو رقم ISBN 10:0-7356-2400-3) كان لا يقدر بثمن بالنسبة لي.لم أقرأ كتاب جونس، لكنه رجل ذو جودة ويشرح الأمور جيدًا، لذلك أفترض أن تغطيته ستكون جيدة أيضًا.

مصدر عظيم آخر هو مدونة بارت دي سميت

راقب أيضًا MSDN، نموذج التعليمات البرمجية لإنشاء ملف Linq بسيط لقاعدة البيانات (بقلم بيدرام رضائي) على وشك الحصول على حوالي 40 صفحة من Doco تشرح ذلك.

مورد مفيد حقًا لـ Expression Tree's في الواقع سأعتبره بمثابة يجب ان يملك هل مصور شجرة التعبير أداة التصحيح.

يجب عليك أيضًا أن تتعلم قدر ما تستطيع عن Expression Tree Visitors، حيث يوجد تطبيق جيد جدًا للفئة الأساسية هنا.

فيما يلي بعض نماذج التعليمات البرمجية المشتقة من فئة الزائر هذه لإجراء بعض التصحيح (استندت في ذلك إلى بعض نماذج التعليمات البرمجية في الكتاب الذي ذكرته) استدعاء أسلوب prependIndent هو مجرد أسلوب تمديد على سلسلة لوضع "--" عند كل مسافة بادئة مستوى.

  internal class DebugDisplayTree : ExpressionVisitor
  {
    private int indentLevel = 0;

    protected override System.Linq.Expressions.Expression Visit(Expression exp)
    {
      if (exp != null)
      {
        Trace.WriteLine(string.Format("{0} : {1} ", exp.NodeType, exp.GetType().ToString()).PrependIndent(indentLevel));
      }
      indentLevel++;
      Expression result = base.Visit(exp);
      indentLevel--;
      return result;
    }
    ...

نصائح أخرى

أنا لا أدعي أنها شاملة، ولكن لدي عدد منها Expression دعامات على مدونتي.إذا كنت مقيمًا في المملكة المتحدة، فسوف أقوم أيضًا بتقديم جلسة حول Expression في DDD جنوب غرب في مايو (و ليلة أمس, ، ولكن بعد فوات الأوان؛-ع).يمكنني نشر مجموعة الشرائح وبعض الروابط من المقالات ذات الصلة، إذا كنت تريد...لسوء الحظ، كان من المفترض أن يكون pptx تحدث نادرا ما يجعل القراءة المستقلة معقولة.

بعض القراءة الأخرى (ليست من المدونة):

(وحمولة كاملة من المشاركات هنا وعلى microsoft.public.dotnet.languages.csharp - حاول البحث عن:+تعبير -regex -"تعبير عادي"

تعلم المخطط.تستخدم التعبيرات نفس مبادئ حساب التفاضل والتكامل لامدا، وبالتالي ستمنحك رؤية أفضل.

وبدلاً من ذلك، يمكنك إلقاء نظرة على DLR، وهي مشابهة ولكنها أقل أناقة بكثير.

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