Обычно, если значение не может быть преобразовано, я выбрасываю Exception
Это потому, что если я пытаюсь преобразовать значение с использованием недопустимого конвертера, я хотел бы получить уведомление об этом, чтобы я мог изменить свой код.
В некоторых редких случаях значение может быть допустимым, даже если оно не может быть преобразовано, и в этом случае я обычно возвращаю то же значение, которое было передано в преобразователь. Это используется, только если я хочу, чтобы значение было преобразовано, если это возможно, или осталось прежним, если нет.
Другой редкий случай, который я иногда делал, это жесткое кодирование значения по умолчанию. Обычно это делается, когда я знаю, что конвертер может использоваться с недопустимым параметром, и я хочу вернуть действительное значение независимо от того, каков результат. Мои жестко запрограммированные конвертеры по умолчанию почти всегда возвращают логические значения.
Не думаю, что я когда-либо возвращал 3 из указанных вами (null
, DependencyProperty.UnsetValue
или Binding.DoNothing
), потому что эти значения часто бывают неожиданными и их нелегко заметить, если вы специально не ищите их.