Проблема не в том, что вы используете string.Format
. Проблема заключается в следующем выражении:
(_Obj == null) ? "unknown" : _Obj.Id
Компилятор не может определить тип этого выражения, поскольку не существует неявного преобразования между int
и string
. Вы уже нашли решение - вызов ToString
означает, что выражение возвращает string
в любом случае. Другой способ, которым вы могли бы это исправить (но немного менее эффективный в этом случае из-за бокса), это явно сказать компилятору, как выполнить преобразование. Например, вы можете использовать явное приведение к object
:
(_Obj == null) ? "unknown" : (object)_Obj.Id
Ваш второй пример работает без явного приведения, поскольку string.Format
ожидает object
и существует неявное преобразование из int
в object
.