В LINQPad результаты имеют специальный стиль для NULL. Как я могу применить это к логическим значениям или другим значениям?

#linqpad

#linqpad

Вопрос:

Я хотел бы иметь возможность стилизовать различные возвращаемые значения аналогично тому, как LINQPad стилизует NULL как курсивный зеленый текст. В частности, я хотел бы по-разному стилизовать логические значения TRUE и FALSE, например, синий и красный.

нулевые значения стилизуются по-разному

Ответ №1:

Это невозможно сделать с помощью встроенного редактора таблиц стилей. Однако вы могли бы написать метод расширения, который вы вызываете следующим образом:

 void Main()
{
    // AdventureWorks
    Contacts.Select (c => new { c.FirstName, c.LastName, NameStyle = c.NameStyle.RedBlue() }).Dump();
}

static class Extensions
{
    public static object RedBlue (this bool value)
    {       
        string c = value ? "Blue" : "Red";
        return Util.RawHtml ("<span style='color:"   c   "'>"   value   "</span>");
    }
}
 

Если вы поместите метод расширения в проект VS и скопируйте DLL в папку плагинов LINQPad, он будет автоматически доступен для всех запросов.

РЕДАКТИРОВАТЬ: теперь вы можете определить этот метод в запросе «Мои расширения» вместо того, чтобы создавать проект в VS.

Комментарии:

1. Класс extensions прекрасно работает в LINQPad, когда я добавляю его в свой запрос, но компиляция его в отдельную DLL не работает. LINQPad говорит, что у него нет определения для расширения. Возможно, есть что-то, что я пропустил при создании класса в VS. Я не хочу отнимать у вас время на это, так как могу дождаться финальной версии с подключаемым модулем.

2. Я полагаю, вы проверили очевидные вещи… класс является общедоступным, и пространство имен импортируется (или, проще говоря, вы можете определить его как пространство имен верхнего уровня). Вы ссылаетесь на DLL вручную из LINQPad или помещаете ее в папку плагинов?

3. Спасибо, что проверили очевидное! Я просто не установил класс public!! Упс. Спасибо за вашу помощь и этот отличный совет по улучшению вывода.

Ответ №2:

У меня есть успех с этим блоком кода в MyExtensions sketch:

 void Main()
{
    (!(true.Dump())).Dump();
}

public static class MyExtensions
{
    public static bool Dump (this bool value)
    {       
        string c = value ? "Blue" : "Red";
        Util.RawHtml ("<span style='color:"   c   "'>"   value   "</span>").Dump();
        return value;
    }
}