Оператор и интерполяции строк в C# 6

сделать оператор и интерполируемой строки синтаксис разрешить только синтаксический сахар?

оператор null-conditional (?.), что позволяет очистить код за счет уменьшения "чрезмерного" null проверка, и интерполированные строки (("{X}, {Y}")), который объединяет Аргументы и формат в один, являются новыми функциями в C# 6.

компилируются ли они для своих нежелательных аналогов (т. е. уродливый код мы стремились избежать)?

Я прошу прощения за наивный вопрос, у меня нет лучшего понимания языков в целом, но мне любопытно, можно ли запустить эти функции, скажем, на C# 5.

Я знаю, что это так с Java в некоторых случаях, это правда, а также с этими примерами?

3 ответов


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

Синтаксический Сахар

  • интерполяция строк-это:

    string result = $"{bar}";
    

    вместо:

    string result = string.Format("{0}", bar);
    
  • распространения null оператор (?.) - это:

    var result = Foo()?.Length
    

    вместо из:

    var temp = Foo();
    var result = (temp != null) ? temp.Length : null;
    

Новые Возможности

  • строка интерполяции - также добавляет поддержку для IFormattable используя FormattedString так что это возможно:

    IFormattable result =  $"{bar}"
    
  • ждите в catch / finally-теперь можно использовать await на catch и finally блоки:

    try
    {
    }
    catch
    {
        await Task.Delay(1000);
    }
    

есть, конечно, больше возможностей в обеих категориях, таких как фильтры исключений и выражение тела члены.


как и большинство новых функций в C#6.0, оператор null-conditional-это просто стенография (синтаксический сахар, если вы хотите его назвать) для шаблона получения значения члена, если экземпляр используемой переменной не равен null.

дали s типа string это:

int? l = s?.Length;

переведена на:

int? l = s == null ? null : s.Length;

и его можно совместить с оператор объединения null (??):

int l = s?.Length ?? 0;

строка интерполяция также началась как стенография для string.Format но развился до шаблона, который может либо произвести string или IFormatble. Пожалуйста, обратитесь к текущая спецификация для получения дополнительной информации.

и, кстати, Рослин - это кодовое имя для платформы компилятора, а не языки или их функции.


оператор Elvis очень полезен при вызове события RaisePropertyChanged.

в прошлом вы бы написать

if (PropertyChanged != null)
{
    PropertyChanged(this, new PropertyChangedEventArgs(nameof(X));
}

но была потенциальная проблема с несколькими потоками, если PropertyChanged было установлено значение null до его вызова. Вместо этого, вы можете написать:

PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(X));

что полностью исключает проблему многопоточности-так что это не совсем синтаксический сахар.