Avatar ·

لماذا استخدام Expression<Func<T>> بدلاً من Func<T> في C#؟ اشرح مع أمثلة

مرحباً بالجميع! بدأت تعلم C# وصادفت هذا البناء: `Expression>`. من الواضح أن `Func` هو مجرد مفوض (delegate) يمكن استدعاؤه. لكن لماذا نلفه في `Expression<>`؟ يبدو أنه يمكن ببساطة تمرير lambda كـ `Func` واستدعائها عند الحاجة. على سبيل المثال، في Entity Framework رأيت أن في دوال مثل `.Where()` غالباً ما يستخدمون `Expression>`. لكن إذا كتبت `.Where(x => x.Age > 18)`، فإن المترجم (compiler) يضع النوع المناسب تلقائياً. لماذا أحتاج إلى تحديد `Expression<>` بشكل صريح؟ لدي هذا الكود: ```csharp Func square = x => x * x; Console.WriteLine(square(5)); // 25 ``` وهذا: ```csharp Expression> squareExpr = x => x * x; // كيف أستخدم هذا؟ لا يمكن استدعاؤه ببساطة. ``` أفهم أن `Expression<>` هو نوع من "شجرة التعبيرات" (expression tree)، لكن لا أستطيع استيعاب الفرق العملي. متى أحتاج إلى استخدام `Expression>`، ومتى يكون `Func` كافياً؟ ولماذا في بعض المكتبات...