Ответ 1
Но почему мой вызов неоднозначен без приведения?
Поскольку перегрузка с параметром JObject
"лучше", чем перегрузка с параметром object
... потому что преобразование с null
в JObject
"лучше", чем преобразование из null
до object
.
JObject
более специфичен, чем object
, потому что существует неявное преобразование от JObject
до object
, но не наоборот.
Если окончательный параметр для первого метода был вместо string
(например), то ни перегрузка не была бы лучше, чем другая, и вызов был бы неоднозначным без трансляции.
См. раздел 7.5.3 спецификации С# 5 для всех сложных деталей. В частности, здесь применим раздел 7.5.3.5 ( "лучшая цель преобразования" ).