Básicamente, XNamespace proporciona un operador que realiza conversiones implícitas.
Creo que la mayoría de las pautas de sentido común se aplican, solo úselas donde tenga sentido y evite confusiones. El mayor problema es conversión involuntaria que podría abrirse para errores de programación. Puede evitar esto y aún así proporcionar una conversión con un operador de conversión explícita.
Un ejemplo de un caso en el que desearía utilizar un operador de conversión explícito en lugar de uno implícito sería una clase entera que permita la conversión de un tipo de punto flotante; una conversión implícita escondería el truncamiento/redondeo que debería tener lugar y podría confundir al usuario (y probablemente sea la fuente de errores).
En mi código lo he usado un par de veces, por ejemplo, en una estructura de resultado de validación muy simple que proporcionó una conversión implícita a bool (pero no desde). Esto me permitió hacer if (result) { ... }
(el jurado todavía está deliberando acerca de la utilidad de esto :)).
Supongo que la mayoría de su uso es para tipos de datos "simples", como enteros grandes, decimales y del mismo modo.
En mi experiencia, solo confunde a personas que desconocen esta posibilidad. Una vez que sepa que el código anterior es legítimo y que la conversión implícita es posible, es obvio que hay un operador de conversión implícito. Este tipo de conversiones deben usarse con moderación de todos modos. – Dykam