2013-04-26 8 views
6

Являются ли деревья выражений основным языком или функцией объекта/библиотеки BCL? Это то, что вы не можете построить без основных функций языка C#?Является ли деревья выражений основным языком C#?

+4

В той мере, в какой существует неявный отбор из лямбда формы 'Func ' '' Expression > ', что компилятор должен делать во время компиляции, я так думаю. –

+1

Вы можете использовать методы builder вместо перевода лямбда-выражения в дерево выражений. Но это * много * более подробный. – CodesInChaos

+0

В какой части функции вы спрашиваете? – SLaks

ответ

3

Нет, деревья выражений не являются языковыми признаками. Они могут использоваться с любого языка .NET, поэтому они не могут быть C# специфическими. Это обычные типы CLR, определенные во встроенной сборке.

Конструкция с помощью лямбда-выражений (и LINQ) является спецификацией C#. Но вы всегда можете создать эквивалент Expression вручную. Сам компилятор C# ничего не делает, кроме как испускать вызовы для известных статических методов построения Expression. Вы можете проверить, что компилятор испустил, декомпилировав двоичный файл с Reflector, настроенным на старую версию .NET.

Являются ли деревья выражений внутренними API-интерфейсами .NET Framework, это не связанный с этим вопрос, но я не могу придумать какой-либо причины, по которой им нужно будет.

+1

«Нет, они не являются языковой функцией. Они могут использоваться с любого языка .NET, поэтому они не могут быть C# специфическими». - Это неправильно. Они * являются языковой особенностью C# ... и F # ... и Visual Basic ... ---- Каждый должен знать синтаксис языка и т. Д., Чтобы фактически создать дерево выражений из текста в исходном файле. –

+1

@Timothy: Нет, вы имеете в виду _lambda expressions_. _Those_ - это языковые функции. Сами классы «Выражение» - это просто обычные классы .NET. Все, что может использовать классы .NET, может использовать классы 'Expression'. –

+0

@JeffMercado Oh ... правый. Я думал, что исходный вопрос касался функции лямбда-выражения-к-экспрессии, а не самих «выражений». Да, это не языковые особенности. :) –

0

Как вы можете видеть из определения класса Expression, оно определено в пространстве имен System.Linq.Expressions. Это выражение не является языком языка C# - это класс, который расходуется всеми языками, ориентированными на CLR.

Вот, например, статья на MSDN под названием «Expression Trees (C# and Visual Basic)», иллюстрирующая создание и использование деревьев выражений с использованием C# и VB.NET.

Смежные вопросы