ジェネリック・ラムダ・3項演算子・合体演算子
面白いサンプル作れなかったが、やっと思いつきました。NullObjectならぬNullMethod?
//ジェネリックメッソッドでnullチェック Action NullFunc<T>(T o) { //3項演算子でoがnullなら何もしないデリゲートを返す。null以外ならあえてnullを返す。 return o == null ? (Action)( () => { } ): null; } //メインのStream系処理が終了したのでリソース解放 忌まわしいnullチェックを簡略化 public void close() { //Actionがnullだった場合_ShIO及び_Shellにはインスタンスが有ることを保証されているのでリソース解放(_XXX.Close) (NullFunc<Stream>(_ShIO) ?? _ShIO.Close)(); (NullFunc<SshShell>(_Shell) ?? _Shell.Close)(); }
若しくは
public void close() { Func<bool,Action> NullFunc = o => o ? (Action)( () => { } ): null; (NullFunc(Null == _ShIO) ?? _ShIO.Close)(); (NullFunc(Null == _Shell) ?? _Shell.Close)(); }
メッソッドチェーンも入っているけど、まぁいいか。とにかく括弧が多すぎて可読性は落ちるのが問題 (2番目が説明楽だな。)