Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Это сильно уменьшает количество кода
конкатенацию строк бы посмотрел в IL
а nameof — выглядит неплохо
Сомнительный профит, зато человеку, который пришел из C\C++ будет куда труднее привыкнуть.
Приятная мелочь в итоге, это я говорю после 5 лет разработки :)
using System.Console;
namespace CSharpSix
{
class Program
{
static void Main(string[] args)
{
WriteLine("Hello Habr!");
}
}
} static void Main(string[] args)
{
WriteLine("Hello Habr!");
}
Console.WriteLine("Hello Habr!");
global::System.Console.WriteLine("Hello Habr!");
Console.WriteLine("Hello Habr!");
WriteLine с гораздо меньшей вероятностью окажется именно методом текущего класса.А в конкретном случае, если вы видите WriteLine или там Abs, я не думаю, что у вас реально возникнет такой вопрос.Зато, боюсь, в соглашениях о кодировании скоро может появиться новый пункт «не использовать using static для вызова небиблиотечных статических методов».
Было бы интересно почитать про реальную мотивацию для включения подобного в C# 6.0.
class c
{
public static int Calculate (int abstractValue)
{
System.Func<int,int> abs = v => Math.Abs(v);
System.Func<int,int,int>max= (v1, v2) => Math.Max(v1,v2);
return max(abs(abstractValue), abs(abstractValue - 100));
}
}
Оно, к слову, нормально оптимизируется?
Идеальным было бы, если бы using можно было писать внутри классов и методов…
Ну и вам придется расписывать полностью все типы в сигнатуре.
вы платите за оверхед
Вероятно, так и хотели, но, вероятно, побоялись обвинений в дельфиомании.
Даже лямбды вместо методов и сложение строковых литералов.
Скорее решили не усложнять. Всё-таки «using namespace» внутри функций в плюсах есть, и им следовать — ещё страшнее, чем следовать дельфи. :)
рано или поздно у меня появится желание загнать булавку под ноготь тому, кто одним using'ом превратит код в кашу
System.Func<int, int> abs = v => Math.Abs(v); System.Func<int, int, int> max = (v1, v2) => Math.Max(v1, v2);
Func<int, int> abs = Math.Abs;
Func<int, int, int> max = Math.Max;
class c
{
public static object Property { get; }
}
string departmentName = emp.Department.Name;
string departmentName = emp?.Department?.Name;
double powerValue = Math.Pow(2, 3);
double roundedValue = Math.Round(10.6);static class A
{
public static int sum(int a, int b) => a + b;
}
static class B
{
public static int mult(int a, int b) => a * b;
}
using static System.Console;
using static A;
using static B;
class Program
{
static void Main(string[] args)
{
var s = sum(10, 20);
var m = mult(s, 2);
WriteLine(m);
}
}
Null-условный операторМожет быть Safe navigation operator?
catch (Exception ex) if (ex.InnerException != null)ИМХО, по аналогии с generic, здесь бы больше подошло where вместо if (т.к. второе ассоциируется с неким последующим действием, а первое — именно фильтрация по условию).
throw и throw чем отличаются?Ничем. Но вы, наверное, хотели сказать что-то другое?)
А еще можно в innerException поместить исходное исключение со всем стек-трейсом.Не всегда такой вариант лучший.
throw и throw чем отличаются?
Ничем. Но вы, наверное, хотели сказать что-то другое?)
A throw statement can be used in a catch block to re-throw the exception that the catch block caught. In this case, the throw statement does not take an exception operand.
Это разные записи одного и того же — соответственно, они одинаково портят стектрейс и одинаково обманывают отладчик.
т.к. второе ассоциируется с неким последующим действием, а первое — именно фильтрация по условию
Что нового в C# 6.0?