PDA

View Full Version : سوال: Lambda expressions چیه ؟



mdssoft
چهارشنبه 08 خرداد 1387, 22:59 عصر
سلام به همگی .
بچه ها جایی (http://mds-soft.persianblog.ir/post/38) مطلبی در مورد Lambda expressions خوندم درست نفهمیدم چیه .
می تونید واضح بگید چی هست ؟

mohammad272005
پنج شنبه 09 خرداد 1387, 00:02 صبح
lambda روش جديد و كوتاه delegate نويسي تو C# 3.0 هست كه كارو خيلي آسون ميكنه:

C# 2:IEnumerable<DataRow> rows = Enumerable.Where(Enumerable.Cast<DataRow>(dt.Rows), delegate(DataRow row) { return row["Id"] == 5; });

C# 3:var rows = dt.Rows.Cast<DataRow>().Where(row => return row["Id"] == 5);

mdssoft
پنج شنبه 09 خرداد 1387, 06:43 صبح
ممنون آقا محمد . معلومه خیلی خوب مسلط هستی.
اما من کدت رو نفهمیدم . میشه در مورد کدت کمی توضیح بدی تا من فرقشون رو بهتر بفهمم .

linux
پنج شنبه 09 خرداد 1387, 14:58 عصر
ممنون آقا محمد . معلومه خیلی خوب مسلط هستی.
اما من کدت رو نفهمیدم . میشه در مورد کدت کمی توضیح بدی تا من فرقشون رو بهتر بفهمم .
همه rowهایی که ID شان =5 هست را بر می گرداند

mdssoft
شنبه 11 خرداد 1387, 05:50 صبح
اما مگه delegate نیست ؟

علیرضا مداح
شنبه 11 خرداد 1387, 15:28 عصر
سلام دوست عزیز ،
برای درک بهتر ، حتما" مطلب زیر را مطالعه نمایید :
http://weblogs.asp.net/scottgu/archive/2007/04/08/new-orcas-language-feature-lambda-expressions.aspx

mohammad272005
شنبه 11 خرداد 1387, 22:23 عصر
با سلام
ببخشيد كه مدتي بخاطر مشغله كاري نتونستم دوستان رو زيارت كنم.
عرض كنم به حضور همه بزرگواران كه

C# 2:IEnumerable<DataRow> rows = Enumerable.Where(Enumerable.Cast<DataRow>(dt.Rows), delegate(DataRow row) { return row["Id"] == 5; });
توي اين كد فرض كردم يه كلاس به نام Enumerable وجود داره (كه البته توي NET 3.5. به NET 2.0. الحاق ميشه) كه حاوي يه متد با كد تقريبي زير:


public static class Enumerable
{
public static IEnumerable<TSource> Where<TSource>(IEnumerable<TSource> source, Predicate<TSource> predicate)
{
foreach (TSource item in source)
if (predicate(item))
yield return item;
}
public static IEnumerable<TSource> Cast<TSource>(IEnumerable source)
{
foreach (TSource item in source)
yield return item;
}
}
.
.
.

متد where، فقط اقلامي رو برميگردونه كه توي شرط predicate صدق كنن. cast هم كه تو اوج سادگي فقط با تبديل آيتمهاي يه IEnumerable به TSource، به كمك Where مياد. anonymouse methodي هم كه بصورت delegate براي متد Where ميره دقيقا مشابه where clouse توي SQL عمل ميكنه.
و كد
C# 3:var rows = dt.Rows.Cast<DataRow>().Where(row => return row["Id"] == 5); هم 100% كد C# 2.0 هست كه تحت قوانين C# 3.0 نوشته شده. يعني به جاي ورش قديمي lambda expression، جايگزين anonymouse method شده.
موفق باشيد