Нет, это не одно и то же - первая строка назначает LineSelected
пустой делегат, который сильно отличается от null
.
Самый простой способ обнаружить разницу - это посмотреть код, который компилятор генерирует от вашего имени, когда вы используете лямбда-синтаксис. Этот код:
using System;
class Program
{
static void Main()
{
Action<int> func0 = (x) => { };
Action<int> func1 = null;
}
}
Действительно компилируется в это:
internal class Program
{
// Methods
private static void Main()
{
Action<int> func0 = delegate (int x) {
};
}
}
Обратите внимание, что компилятор был достаточно умен, чтобы удалить func1
, так как он был установлен на null
и не упоминался в других местах. Но обратите внимание, что func0
все еще остается и настроен на делегата, который хоть и ничего не делает, но сильно отличается от null
.