Вы что-то путаете, наверное имеется ввиду не
if, а само ветвление.
Если у метода определено возвращаемое значение - в данном случае bool - то оно должно быть возвращено(либо брошено исключение).
Каждый участок в коде на котором завершеается выполнение метода (терминальная ветвь) должен возвращать значение (за исключением случая, когда возвращаемое значение отсутствует, т.е void), либо кидать Exception.
Рассмотрим код:
public bool Func(int k)
{
if (keyboard.ContainsKey(k))
{
return keyboard[k];
}
// убираем return false;
}
// ... и где-нибудь вызываем
bool val = obj.Func(1);
Допустим ключа 1 не нашлось в keyboard, что в таком случае по вашему должно оказаться в
val?
Возникает неопределенность. Поведение программы становиться непредсказуемым. Одна из целей ЯП выского уровня как раз в предотвращении таких ситуаций.
Т.е перехитрить C# нельзя. По крайней мере не в исходном коде.
Принудительный возврат сделан специально, чтобы снизить вероятность ошибки. Терминальную ветвь не всегда легко увидеть на глаз. А еще устраняет неопределенность: то ли ты забыл поставить возврат (ошибся), то ли так и задумывалось.