Обновление с номером 1 принесло в Visual Studio не только немного измененный значок, но и еще разные приятные нововведения. Кстати, вот так выглядит новый значок:



Одним из дополнений является «Интерактивный C#». Фактически это окошко REPL.

Аббривиатура REPL означает Read-eval-print loop (в переводе получится что-то вроде «считать-выполнить-вывести на экран, повторить»)
Название read-eval-print loop происходит от имён примитивов языка Lisp, которые реализуют подобную функциональность. Примерно вот так выглядит программа REPL на языке Lisp. Всего одна строчка кода:

(loop (print (eval (read))))

То есть первым делом текст считывается, затем выполняется в качестве команды, выводится результат и все это можно сделать еще раз.
REPL среда может быть полезной не только для изучения языка, но и для каких-либо экспериментов с API. С ее помощью можно также запускать и скрипты на C#.

Раньше REPL для Visual Studio и C# был доступен в виде расширения. Сейчас вы так же можете скачать его для VS2015 (если вдруг по каким-то причинам не хотите обновляться до VS2015 update 1 или вас терзает любопытство посмотреть на альтернативный вариант):
VisualStudio C# REPL
Кроме того есть несколько сайтов, которые позволяют поиграть с C# онлайн. Например такой: C# Pad: Run C# Code Online.

Для того чтобы открыть окошко интерактивного C# из Visual Studio 2015, необходимо зайти в меню «Вид», выбрать пункт «Другие окна» и подпункт «Интерактивный C#».



Нам откроется такое вот окошко:



Альтернативно, чтобы поработать с интерактивным C# можно открыть «Командная строка разработчика для VS2015» и набрать csi.

Начнем с самого простого кода C#, который можно выполнить:

Console.Write("Hello, World!")

Нажатие Enter не удивит нас и ожидаемо выведет на экран «Hello, World!». В процессе ввода кода вы можете заметить, что имеется поддержка IntelliSense.

Можно ввести 5+10, нажать Enter и получить ответ в виде 15-ти. Можно присвоить значение переменной. И после, в какой-либо последующей строке использовать эту переменную.

Для примера можно опробовать простенький LINQ запрос данных из массива:

int[] source = new[] { 3, 8, 4, 6, 1, 7, 9, 2, 4, 8 };
foreach (int i in source.Where(x => x > 5))   Console.WriteLine(i);

Запуск команд и задание значений переменным это не все что можно делать в интерактивной строке. Можно еще и задавать ссылки на пространства имен с помощью директивы #r. Например:

#r "System.Windows.Forms"
using System.Windows.Forms;
var f= new Form { BackgroundImage = System.Drawing.Bitmap.FromFile("D:/fun.jpg") };
f.ShowDialog();

Некоторые пространства имен можно использовать без добавления директивой #r. Например, скачаем файл из habrastorage:

using System.Net;
WebClient webClient = new WebClient();
webClient.DownloadFile("https://hsto.org/files/229/aad/50d/229aad50de554be19ce60c60dbfd2e7e.png", @"d:\myfile.png");

Этот текст можно как ввести в консоли интерактивного C#, так и сохранить в текстовом файле формата csx.

С помощью директивы #load можно загрузить и выполнить скрипт. Например, вот так:

#load "myScriptContext.csx"

Альтернативно выполнить скрипт можно из «Командной строки разработчика для VS2015» выполнив команду csi и указав путь к скрипту:

csi /path/myScript.csx

Еще есть крайне полезная директива – это директива #clear или #cls. Оба значения работают одинаково и очищают экран. Очищается только экран, все произошедшие объявления переменных, пространств имен и кода остаются в памяти.

#help – эта директива выводит справку
#reset – очищает среду исполнения. Если вызвать #reset noconfig то будет пропущен запуск конфигурационного скрипта, запускающегося при инициализации и добавляющего основные пространства имен.

Напоследок предлагаю вам посмотреть видео (на английском языке) от Kasey Uhlenhuth в котором она извлекает информацию из GitHub:



И почитать вики (опять же на английском):
Interactive Window
C# Interactive Walkthrough

Комментарии (25)


  1. Oxoron
    16.12.2015 11:15
    +14

    Как непривычно смотрится студия с русским языковым пакетом.


    1. Viacheslav01
      16.12.2015 16:24
      +4

      Русский для инструментов разработки и файлов помощи зло!
      Как меня напрягает он, кто бы знал, в W10 нет возможности сменить язык системы, фиг знает почему не находит пакет и все тут.
      В общем сообщения .Net на русском выводят из себя, промахи помощи на русском тоже, отсутствие ссылок в помощи, корявый перевод и не однозначные термины.
      В общем зло чистой воды, а после того как оно еще и ставит язык по совему выбору, воспринимаю как истинное зло!


      1. PsyHaSTe
        21.12.2015 15:37
        +1

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


  1. Poliakov
    16.12.2015 11:39
    +1

    linqpad придумали, молодцы =)))


  1. kekekeks
    16.12.2015 12:18
    +2

    Было в Mono 8 лет назад. Но теперь с Roslyn добралось и до студии, да.


  1. BlackSwan
    16.12.2015 13:35

    Вот если бы этот Interactive C# да вместе с Visual Studio Code…


    1. tym32167
      16.12.2015 14:28

      получили бы linqpad


      1. BlackSwan
        16.12.2015 15:13

        Спасибо за наводку, попробую поганять на планшете/старом ноуте. Должно сойти для простых вычислительных задач и задач по оперированию данными, для которых сейчас я использую дистрибутив PHP и блокнот :)


        1. BlackSwan
          16.12.2015 15:24

          Однако автокомплит там платный… Эх, а мечта ещё не сбылась


          1. tym32167
            16.12.2015 15:51

            Ну, лично я купил лицензию и пользуюсь линкупадом уже более 4 лет. Ну, и вы можете либо купить, либо сами знаете что.


            1. BlackSwan
              17.12.2015 12:17

              Эх… Покупать не хочется, имея на руках бесплатную альтернативу в виде пхп. Ну а сами знаете что для меня не вариант :)


        1. Oxoron
          16.12.2015 15:45

          Зачем PHP? У меня как-то был под рукой только бабушкин комп без инета, я вычислял на JS. Или нужен доступ к ФС\что-то специфическое?


          1. BlackSwan
            17.12.2015 12:15

            Ну да, иногда и в консоли хрома считаю. Но чаще приходится браться за пхп ради задач типа: вот тут в файле есть данные в строчку разделённые запятой а мне надо в массиве с разметкой json и с дополнительной инфой о каждом элементе.
            Запускать для такого студию, создавать проект, потом удалять его… Быстрее на пхп без подсветки находить :)


  1. knagaev
    16.12.2015 18:18
    +3

    Для тех, кто не знает, есть такая штука
    cshell.net
    По мне так очень удобная и бесплатная.


    1. RaveNoX
      16.12.2015 23:27

      Посвежей: scriptcs.net
      Кстати судя по #r именно он и используется для repl в студии


      1. knagaev
        16.12.2015 23:48

        Спасибо за ссылку, посмотрю.
        А насчёт #r погорячились — в F# такая команда тоже есть :)


  1. lam0x86
    16.12.2015 21:09

    Надеюсь, когда-нибудь эта консоль сможет подключаться к отладочной сессии приложения с захватом всех текущих объектов при срабатывании break points. Тогда ей и правда цены не будет. А пока я, честно говоря, на могу найти ей применение.


    1. svekl
      16.12.2015 21:50
      +1

      Вы разве не о Immediate Window говорите?


      1. lam0x86
        16.12.2015 21:58

        Да, но в нём нет всех этих фич — IntelliSense, лямбд (?), импорта сборок. Я как-то не привык им пользоваться, скорее всего из-за этих ограничений.


        1. svekl
          16.12.2015 22:21

          IntelliSense и Лямбды(в 2015) есть, очень удобная штука, в случаях если не хватает Watch. Но иногда, конечно, импорта сборок и пространств имён не хватает.


          1. lam0x86
            16.12.2015 23:05

            Хм… А не подскажете, как включить IntelliSense? У меня почему-то в 2015-й (Update 1) не работает…


            1. lam0x86
              16.12.2015 23:07

              И ещё интересно, поддерживаются ли extension-методы?


              1. dordzhiev
                17.12.2015 01:14

                Как и всегда, Ctrl+Space. Extensions также дополняются. 2015 студия без Update 1.


          1. Viacheslav01
            17.12.2015 01:53

            За частую это единственный вариант получить значение переменной, на связке Windows Store App + PCL, watch там просто не работает, показывая ерись про то, что у него не загружены сборки десктопного .Net


  1. snegovikufa
    17.12.2015 06:52

    Я сам пользуюсь dotnetfiddle. Умеет сохранять все твои наработки и подгружать Nuget пакеты