Преобразования, подобные этому, должны быть определены в время компиляции - тогда как в вашей последней строке тип времени компиляции o
просто object
, поэтому компилятор "не знает"«о вашем преобразовании в качестве опции.
Трудно найти лучшее решение вашей проблемы, кроме как просто сказать« не делайте этого »- если вы используете dynamic
вместо object
(и выконечно, вы используете C # 4), тогда он будет работать - но лично я бы просто попытался , а не , чтобы полагаться на определенные пользователем преобразования, подобные этому.Они делают кодовую базу очень трудной для понимания, ИМО.
Любой, кто читает выражение (string) o
, где o
- это просто object
, будет ожидать , что это будет простое приведение, т.е.что не состоялось бы, если бы o
фактически не ссылался на строку (или был нулевой ссылкой).Пытаться найти способы опровергнуть это ожидание - плохая идея, ИМО.