Официальное обоснование:
-For high performance and native development scenarios, you may want “stack-only” types that always stay on execution stack..
-...
-Cannot be dynamic binding, boxing, unboxing, wrapping or converting.
-----ref struct is also called embedded reference.
Раньше было так:
public struct S
{
public int A;
public int B;
}
public void M0(ref S s){}
public struct S1
{
public S SF;
public int C;
}
public void M1(ref S1 s){}
Теперь сделаем финт ушами, и допишем ref перед "struct S". Результат — всё сломалось.
Нафига козе баян??? Зачем положили верёвку, которая стреляет в ноги мимопроходящим?
Когда кто-то, у кого его лямбда не компилируется попытается закрыть свою таску (по-быстрячку, перед релизом), то он не задумываясь удалит слово "ref". Всё ведь и правда заработает — серьёзно! Человек, который мерджит реквесты потом замыленным, уставшим взглядом этого просто не заметит.