Когда вы непосредственно назначаете функцию делегату, компилятор преобразует функцию в требуемый тип делегата, если он соответствует подписи.
Однако, когда вы используете оператор?: Для компилятора вы не назначаете делегату напрямую, поэтому он не знает, какой тип использовать для One и Two, и поэтому считает, что два типа, используемые в операторе?: не совпадают.
Единственное исправление делает явное преобразование:
Func<int, string> action = which ? new Func<int, string>(One) : new Func<int, string>(Two);