سؤال

هل يمكنك ان تفسر لى:

  • ما هو مندوب المسند؟
  • أين يجب أن نستخدم المسند؟
  • أي أفضل الممارسات عند استخدام المسند؟

سيتم تقدير شفرة المصدر الوصفية.

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

المحلول

المسند هو وظيفة تعود true أو false. وبعد مندوب المسند هو إشارة إلى المسند.

لذلك في الأساس مندوب المسند هو إشارة إلى وظيفة تعود true أو false. وبعد المسندات مفيدة للغاية لتصفية قائمة القيم - هنا مثال.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> list = new List<int> { 1, 2, 3 };

        Predicate<int> predicate = new Predicate<int>(greaterThanTwo);

        List<int> newList = list.FindAll(predicate);
    }

    static bool greaterThanTwo(int arg)
    {
        return arg > 2;
    }
}

الآن إذا كنت تستخدم C # 3، يمكنك استخدام Lambda لتمثيل المسند بطريقة نظيفة:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> list = new List<int> { 1, 2, 3 };

        List<int> newList = list.FindAll(i => i > 2);
    }
}

نصائح أخرى

يؤدي ذلك إلى Andrew's And Andrew في التحيات إلى C # 2 و C # 3 ... يمكنك أيضا القيام بهما في وظيفة بحث خارجية واحدة (انظر أدناه).

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> list = new List<int> { 1, 2, 3 };

        List<int> newList = list.FindAll(delegate(int arg)
                           {
                               return arg> 2;
                           });
    }
}

أتمنى أن يساعدك هذا.

مجرد مندوب يعيد منطقية. يتم استخدامه كثيرا في قوائم التصفية ولكن يمكن استخدامه أينما تريد.

List<DateRangeClass>  myList = new List<DateRangeClass<GetSomeDateRangeArrayToPopulate);
myList.FindAll(x => (x.StartTime <= minDateToReturn && x.EndTime >= maxDateToReturn):

هناك مقال جيد حول المسند هنا, ، على الرغم من أنه من حقبة .NET2، لذلك ليس هناك ذكر تعبيرات Lambda هناك.

ما هو المندوب المسند؟

1) المسند هو ميزة تعرض TRUE أو FALSE.This قد حان هذا المفهوم في إطار .NET 2.0. 2) يتم استخدامه مع تعبير Lambda (=>). يستغرق نوع عام كوسيطة. 3) يسمح بتحديد وظيفة المسند وتم تمريرها كمعلمة إلى وظيفة أخرى. 4) إنها حالة خاصة من Func, ، في أنه يستغرق فقط معلمة واحدة ويعود دائما إلى BOOL.

في مساحة الاسم C #:

namespace System
{   
    public delegate bool Predicate<in T>(T obj);
}

يتم تعريفه في مساحة اسم النظام.

أين يجب أن نستخدم المندوب المسند؟

يجب أن نستخدم المفوض المسند في الحالات التالية:

1) للبحث عن العناصر في مجموعة عامة. على سبيل المثال

var employeeDetails = employees.Where(o=>o.employeeId == 1237).FirstOrDefault();

2) المثال الأساسي الذي يقصر الرمز وإرجاعه صحيحا أو خطأ:

Predicate<int> isValueOne = x => x == 1;

الآن، اتصل فوق المسند:

Console.WriteLine(isValueOne.Invoke(1)); // -- returns true.

3) يمكن أيضا تعيين طريقة مجهولة لنوع مفوض المسند على النحو التالي:

Predicate<string> isUpper = delegate(string s) { return s.Equals(s.ToUpper());};
    bool result = isUpper("Hello Chap!!");

أي ممارسات أفضل حول المسند؟

استخدم Func و RameBDA التعبيرات والمندوبين بدلا من المسندات.

تسمح أساليب البحث القائمة على المسندات بطريقة مفوض أو تعبير Lambda لتحديد ما إذا كان عنصر معين هو "تطابق". المسند هو ببساطة مفوض يقبل كائن وإعادة صواب أو خطأ: مندوب المندوب العام المسند (T كائن)؛

   static void Main()
        {
            string[] names = { "Lukasz", "Darek", "Milosz" };
            string match1 = Array.Find(names, delegate(string name) { return name.Contains("L"); });
            //or
            string match2 = Array.Find(names, delegate(string name) { return name.Contains("L"); });
            //or
            string match3 = Array.Find(names, x => x.Contains("L"));


            Console.WriteLine(match1 + " " + match2 + " " + match3);     // Lukasz Lukasz Lukasz
        }
        static bool ContainsL(string name) { return name.Contains("L"); }

إذا كنت في VB 9 (VS2008)، فيمكن أن يكون المسند وظيفة معقدة:

Dim list As New List(Of Integer)(New Integer() {1, 2, 3})
Dim newList = list.FindAll(AddressOf GreaterThanTwo)
...
Function GreaterThanTwo(ByVal item As Integer) As Boolean
    'do some work'
    Return item > 2
End Function

أو يمكنك كتابة المسند الخاص بك باسم Lambda، طالما أنه تعبير واحد فقط:

Dim list As New List(Of Integer)(New Integer() {1, 2, 3})
Dim newList = list.FindAll(Function(item) item > 2)

يسقط المسند تحت فئة المندوبين العامين في C #. وهذا ما يسمى بحجة واحدة وإرجاع دائما نوع منطقية. أساسا، يتم استخدام المسند لاختبار الحالة - صحيح / خطأ. دعم العديد من الفصول المسند كحجة. للحصول على قائمة List.FindAll تتوقع المعلمة المسند. هنا مثال على المسند.

تخيل مؤشر وظيفة مع التوقيع -

مندوب المندوب MyDelegate (تامات)؛

هنا هو المثال

node.cs.

namespace PredicateExample
{
    class Node
    {
        public string Ip_Address { get; set; }
        public string Node_Name { get; set; }
        public uint Node_Area { get; set; }
    }
}

الفئة الرئيسية -

using System;
using System.Threading;
using System.Collections.Generic;

namespace PredicateExample
{
    class Program
    {
        static void Main(string[] args)
        {
            Predicate<Node> backboneArea = Node =>  Node.Node_Area == 0 ;
            List<Node> Nodes = new List<Node>();
            Nodes.Add(new Node { Ip_Address = "1.1.1.1", Node_Area = 0, Node_Name = "Node1" });
            Nodes.Add(new Node { Ip_Address = "2.2.2.2", Node_Area = 1, Node_Name = "Node2" });
            Nodes.Add(new Node { Ip_Address = "3.3.3.3", Node_Area = 2, Node_Name = "Node3" });
            Nodes.Add(new Node { Ip_Address = "4.4.4.4", Node_Area = 0, Node_Name = "Node4" });
            Nodes.Add(new Node { Ip_Address = "5.5.5.5", Node_Area = 1, Node_Name = "Node5" });
            Nodes.Add(new Node { Ip_Address = "6.6.6.6", Node_Area = 0, Node_Name = "Node6" });
            Nodes.Add(new Node { Ip_Address = "7.7.7.7", Node_Area = 2, Node_Name = "Node7" });

            foreach( var item in Nodes.FindAll(backboneArea))
            {
                Console.WriteLine("Node Name " + item.Node_Name + " Node IP Address " + item.Ip_Address);
            }

            Console.ReadLine();
        }
    }
}

يحدد المندوب نوع مرجعي يمكن استخدامه لتغليف طريقة مع توقيع محدد.C # المندوب دورة الحياة:دورة حياة مندوب C #

  • إعلان
  • مثيل
  • في عطلة

تعلم المزيد من النموذج http://asp-net-by-parijat.blogspot.inourn 2010/08/what-is-delegates-in-c-how-to-declare.html.

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