2012-04-04 30 views
65

Birden çok kez duyduğum ifade ağaçları kavramına rastladım. Sadece bir ifade ağacı ve amacının ne anlama geldiğini anlamak istiyorum.İfade Ağaçları nedir, bunları nasıl kullanırsınız ve neden bunları kullanırsınız?

Eğer birisi beni basit açıklamalara ve kullanım örneklerine yönlendirebilirse çok sevinirim.

+1

olası yinelenen [Neden Expression kullanmak istiyorsunuz> yerine Func ? Den] (http://stackoverflow.com/questions/793571/why-would-you-use-expressionfunct- yerine-funct) – nawfal

+0

Birkaç örnekle yanıtladı ..http: //stackoverflow.com/questions/403088/practical-use-of-expression-trees/20470060#20470060 – Moumit

cevap

63

Bir İfade Ağacı temel olarak kod olan İfadeleri içeren bir veri yapısıdır. Yani kodda yapabileceğiniz bir hesaplamayı temsil eden bir ağaç yapısıdır. Bu kod parçaları daha sonra bir dizi veri üzerinde ifade ağacının "çalıştırılması" ile yürütülebilir.

İfade ağaçlarıyla ilgili harika bir şey, bunları kod içinde oluşturabilmenizdir; Yani, kodunda yürütülebilir kod (veya adımların bir dizisi) oluşturun. İfadeleri başka ifadelere göre değiştirerek, kodu çalıştırmadan önce de değiştirebilirsiniz. Bir İfade, (int x => return x * x) gibi bir işlev temsilcisidir.

Ayrıca bkz http://blogs.msdn.com/b/charlie/archive/2008/01/31/expression-tree-basics.aspx

ait
+3

Bu gerçekten doğru değil. Bağlantılı makalede belirtildiği gibi, ifade ağaçları esas olarak başka bir yerde infaz için tel üzerinden gönderilecek hesaplamaları temsil etmek için kullanılır. Bu nedenle kod içermezler; daha ziyade kod yerine onlar. –

+1

İfade Ağaçları, yerel olarak veya uzaktan gerçekleştirmek istediğiniz tüm hesaplamalar için kullanılabilir. Yazılan bir ifadeyi bir İfade Ağacına dönüştürecek bir ayrıştırıcıyı kolayca yazabilirsiniz. Ayrıca İfade Ağaçlarının kod içerdiğini hiç söylemedim. –

+1

"içinde kod parçaları olan ağaç yapısı" "kod içermesi" anlamına gelmezse, o zaman bunu netleştirmek için cevabınızı düzenlemelisiniz. İfadelerin herhangi bir IL kodu içermediğini ve yürütülebilir bir şeye daha fazla çevrilmeye bel bağladığını açıkça belirtmelisiniz. –

İlgili konular