одразу з такого: (uint)x < (uint)Width замість рейндж чеку
а в uint його нашо кастить? там якісь оптимізації?
https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-12#inline-arrays або internal unsafe struct Buf { private fixed byte _buf[16]; internal ref byte this[int index] { get { if ((uint)index >= 16) ThrowHelpers.ArgumentOutOfRange(); return ref _buf[index]; } } }
до речі, прямий throw statement це досить значна деоптимізація, в ідеалі тобі потрібен троу хелпер з сигнатурою [DoesNotReturn] static void ThrowSome() => throw new SomeException();
типу навіть якщо він не визивається?
https://sharplab.io/#v2:EYLgxg9gTgpgtADwGwBYA0AXEBDAzgWwB8ABAJgEYBYAKGIAYACY8gOgBEBLbAcwDsJcGDmFwBuGjXpNWnHv0HDcLAMIQAJjACCvbABsAnrg5jJAZiakGyhgG8aDBwwAOUDgDdsGGAwBCAVwAzBgB9YECAmChxakcGe0dic2B9LwYAWQAKDl4MBg4ASgYAXgA+ELCAiKgWAHEYDAAVAAsoCAB3AAkYXSdIrPzo2MSGZNSAOSycvMLS8vDI2vrm1raAZQxPGHwYHP7ogF8Jaj9eXGwIhkEoPzBc/wCaOxjHF3dNhgCOBBg1EZTvUKBADa5CQAF1ovEHMNYEFRt46o0Wu0uj0+tlctkNAh8lDbHjYhwghkMn4MfksTAEAwSkUGKDcc9Yg4nsy2Qxlijur0oLhSCwAPJ+DACgIAJWwvG4MAyAwJjkO1Hl0IA7AxYXMAkDKQgIXjFXiYTA4f8GIjOWsNl5trsMXleNjGbFWeyiQwSWSchSHVSaXSGcr8Uz2Q4MMi2gxeDAIwBJH0IIUi8WS6UAUQQYBgTiEEF4ssG7INwaGao1gK1Or1wcVReYSAsHPDqJ5fMeeKBbAgMFwYwgGDF9T8UF4aAY62wYAA1g0oBOYB0OGoNLwwYbzHWmCgGInRRKpTKnY4XWywytI9GGHHsTvk/v05nsxxc/n9TR9kA=== дещо спрощенний варіант - в залежності від контексту пессимізація буде різною але це стандартна практика виносити логіку в хелпер якщо вже кидаєш, в перформанс сенсітів сценаріях
А чому так? І що робить аттрибут?
https://habr.com/en/articles/722374/ ось вчора читав зара отпінають за хабр але все ж
Обсуждают сегодня