Это субъективный ответ, но я бы использовал unsafe
на уровне метода, например:
private unsafe int MyFunc ( ... )
{
...
}
Когда вы используете unsafe
внутри тела функции, оно скрыто, и его трудно найти, хотя что-то подобное должно быть очень очевидным. Все прочтут объявление функции, но не все войдут в тело функции, если только им это не нужно.
Наличие unsafe
в объявлении делает его более заметным.