皆さんの意見が聞けて参考になります。ありがとうございます。

あのあと考えたのですが、関数の戻り値専用のクラスを作るというのもアリだなと。
そうすればメンバー名で 成功/失敗 がちゃんとわかる bool値も持てるし、
それ以外の値(データ)も返すことができるなぁと。( でも C# だと out引数とかあるんですよね、こっちを使う方がいいか…)

時にC#ではキャストを定義することってできないんでしょうか?
色々試したんですけど駄目でした。
以下失敗例
public TargetType operator();
public TargetType this();
public (TargetType) this();

同じかなと思ってC++系のキャストについて調べたんですけど、
C++でもCスタイルキャストって定義/再定義できないんですかね?