Что такое хороший вариант использования для .net 4.0 Expression Trees?

попытайтесь использовать col пример s

<table>
    <col style="padding-right:20px;" />
    <col style="padding-right:30px;" />
    <col />
    <tr>
        <td></td>
        <td></td>
        <td></td>
    </tr>
    <tr>
        <td></td>
        <td></td>
        <td></td>
    </tr>
</table>

, седла также поддерживают классы:)

надежда это помогает

РЕДАКТИРОВАНИЕ Darko

: Для разъяснения col элемент, который, как объявляют наверху таблицы, влиял на все столбцы. Первый элемент седла будет влиять на первый столбец, второе седло = второй столбец и так далее. Они могут быть сгруппированы в colgroups, если Вы хотите присвоить тот же стиль больше чем одному столбцу.

EDIT2: еще После некоторого исследования оказывается, что единственные надежные стили, которые можно установить на col элемент:

  • граница
  • фон
  • ширина
  • видимость

Никакое поле или дополнение. Педераст! Был бы, устанавливая ширину столбцов, явно решают Вашу проблему?

16
задан KevinDeus 7 October 2009 в 16:07
поделиться

9 ответов

Дерево выражений настолько мощное, что позволяет обрабатывать код как данные . Пользователи привыкли накапливать данные, сохранять их и возвращаться к ним позже.

Деревья выражений позволяют делать то же самое с кодом. Например, вы можете взять введенные пользователем данные (флажки, диапазоны номеров и т. Д.) И преобразовать их в дерево выражений. Затем это дерево выражения может быть выполнено или сохранено для дальнейшего использования. Очень круто.

Подумайте о практических применениях отчетов, таких как создание и сохранение фильтров данных и сопоставлений данных.

16
ответ дан 30 November 2019 в 16:42
поделиться

Вы можете использовать деревья выражений для преобразования языка домена в исполняемый код.

8
ответ дан 30 November 2019 в 16:42
поделиться

Решение, ищущее проблему, а?

Деревья выражений позволяют представить код как трансформируемую структуру данных, поэтому они идеально подходят для преобразования между языками. Linq To SQL является наиболее мощным в настоящее время.

Другое использование помимо DSL (которое является преобразованием) - это распараллеливание (которое является разделением), и примером в этом пространстве является PLINQ.

4
ответ дан 30 November 2019 в 16:42
поделиться

У меня был хороший опыт их преобразования AST моего предметно-ориентированного языка в деревья выражений. С помощью адаптера дерева ANTLR довольно просто создать дерево выражений непосредственно из грамматики.

1
ответ дан 30 November 2019 в 16:42
поделиться

Деревья выражений .NET 4.0 также являются основой для DLR AST

3
ответ дан 30 November 2019 в 16:42
поделиться

Вы можете использовать дерево выражений как построитель кода с более высоким уровнем абстракции, чем сборщик, и быстрее, чем CodeCompiler. Вот некоторые доказательства концепции, которую я использовал, чтобы убедить нашу команду использовать их в качестве замены CodeCompiler.

[TestClass]
public class WhenINeedToAccessPropertiesByNameHavingATypeReference
{
    public class SomeCategoryData
    {
        public DateTime CreatedDate { get; set; }
    }

    [TestMethod]
    public void ICanDoThatWithAnExpressionAndItPerformsWell()
    {
        // INIT

        var someCategoryData =
            Enumerable.Range(1970, 100).Select(year =>
                new SomeCategoryData { CreatedDate = new DateTime(year, 1, 1) }).Cast<object>();
        var t = typeof(SomeCategoryData); // or it can be: t = someCategoryData.First().GetType();
        var compiled = Stopwatch.StartNew();

        // ACT

        var filter = AccessPropertyByNameInCompiledMannerSomehow(t, "CreatedDate");

        // ASSERT

        Trace.WriteLine(string.Format("compiled in: {0}", compiled.Elapsed));
        Assert.IsTrue(compiled.ElapsedMilliseconds < 3, "compiles fast enough");

        var executed = Stopwatch.StartNew();

        // ACT
        List<object> result = null;
        for (var i = 0; i < 10000; i++)
        {
            result = someCategoryData.Where(d => filter(d, new DateTime(2000, 1, 1), new DateTime(2009, 1, 1)))
                .ToList();
        }
        executed.Stop();
        Trace.WriteLine(string.Format("executed in: {0}", executed.Elapsed));

        // ASSERT
        Assert.AreEqual(10, result.Count, "insure compiled code actually works");
        Assert.IsTrue(executed.ElapsedMilliseconds < 300, "runs fast enough");
    }

    private static Func<object, DateTime, DateTime, bool>
        AccessPropertyByNameInCompiledMannerSomehow(Type t, string fieldToFilterBy)
    {
        var objectParameter = Expression.Parameter(typeof(object), "p");
        var instance = Expression.Convert(objectParameter, t);
        var lower = Expression.Parameter(typeof(DateTime), "l");
        var upper = Expression.Parameter(typeof(DateTime), "u");

        var composite = Expression.Lambda<Func<object, DateTime, DateTime, bool>>(
            Expression.And(
                Expression.LessThanOrEqual(
                    lower,
                    Expression.PropertyOrField(instance, fieldToFilterBy)
                    ),
                Expression.GreaterThanOrEqual(
                    upper,
                    Expression.PropertyOrField(instance, fieldToFilterBy)
                    )
                ), objectParameter, lower, upper
            );

        return composite.Compile();
    }
}
1
ответ дан 30 November 2019 в 16:42
поделиться

Быстрый ответ: «Нет, теперь это не только для поставщиков LINQ». Во-первых, деревья выражений были расширены средой выполнения динамического языка для поддержки динамических языков. По сути, если вы хотите перенести свой собственный динамический язык на .NET (как это сделали IronPython и IronRuby), вам придется использовать деревья выражений. Хорошо, не так уж много людей владеют собственным языком. Какие еще варианты использования? Один из них - генерировать динамический код во время выполнения. У меня есть пример: Создание динамических методов с деревьями выражений в Visual Studio 2010 . В нем объясняется, как вы можете использовать ET вместо генерации MSIL для создания динамических методов. На самом деле, есть несколько вариантов использования деревьев выражений вне LINQ даже в .NET 3.5, но эти сообщения еще не написаны.

2
ответ дан 30 November 2019 в 16:42
поделиться

У меня есть несколько примеров здесь

(извините за неправильное форматирование кода)

1
ответ дан 30 November 2019 в 16:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: