Исключения предназначены для исключительных случаев, поэтому использование исключений для известных и ожидаемых ситуаций ошибки - "плохо". Кроме того, теперь вы, скорее всего, будете иметь повсюду попытки-обработчики, чтобы обработать эту ошибку именно потому, что вы ожидаете, что эта ошибка возникнет.
Если сделать возвращаемое значение параметром приемлемым, если единственное условие ошибки (скажем, -1) можно спутать с реальным значением. Если у вас может быть отрицательный номер тайла, тогда это лучший способ.
Обнуляемое int является возможной альтернативой ссылочному параметру, но вы создаете объекты с этим, так что, если "ошибка" является обычной, они могут заставить работать больше, чем ссылочный параметр. Как указал Роман в комментарии в другом месте, у вас будут проблемы C # и VB с обнуляемый тип , вводимый слишком поздно для VB, чтобы обеспечить хороший синтаксический сахар, как у C #.
Если ваши плитки могут быть только неотрицательными, то возврат -1 является приемлемым и традиционным способом указать на ошибку. Это также было бы наименее дорого с точки зрения производительности и памяти.
Что-то еще, чтобы рассмотреть, является самодокументированием. Использование -1 и исключение являются условием: вам нужно написать документацию, чтобы убедиться, что разработчик знает о них. Использование возврата int?
или ссылочного параметра лучше самоописывает себя и не потребует документации для разработчика, чтобы знать, как справиться с ошибкой. Конечно, :) вы всегда должны писать документацию, точно так же, как вы должны ежедневно чистить зубы.