Вместо PHP синтиакисиса лучше бы добавили нормальные прекондишн аргументов
[PreCondition(i1 => i1 > 0)]
[NotNullArgument(i2)]
public void MyMethod(int i1, string i2)
{
.......
}
или так:
[i1 => i1 > 0]
[i2 is not null]
public void MyMethod(int i1, string i2)
{
.......
}
["At least two pieces are required": list => list != null && list.Count >=2]
[s2 is any]
public void MyMethod(MyCollection list, string s2)
{
.......
}
1. В месседж ArgumentException должен вклеиваться исходник лямбды, если в прекондишн нет кастомного сообщения типа At least two pieces are required
2. И по формальному "аргументу" лямбды компилятор должен понимать к какому аргументу метода относится констрейнт
3. Компилятор должен выдавать ошибку, если нет прекондишн или [s2 is any] для тех методов которые помечены Strict на уровне класса или сборки.
Практически во всех невоспроизводимых багах, c которыми я сталкивался, нехватало проверки аргументов.