Else
一度だけ呼び出すことができるメソッドを含む流暢なインターフェイスを定義するクラスがあります。したがって、私が抱えている問題は、それが呼び出されたかどうかを確認する方法です。現在、私は追加のブールフィールドを介してこれを行っています:
public class FluentMatcher<T1, T2, TResult>
{
private bool _elseValueSet;
private TResult _elseValue;
...
public FluentMatcher<T1, T2, TResult> Else(TResult resultIfElseRequired)
{
if (_elseValueCalled)
{
throw new ElseAlreadyAddedException();
}
_elseValue = resultIfElseRequired;
_elseValueSet = true;
return this;
}
}
私はこれに不快感を覚えているので、次のようなことを考えています:
public class FluentMatcher<T1, T2, TResult>
{
private Initialisable<TResult> _elseValue;
...
public FluentMatcher<T1, T2, TResult> Else(TResult resultIfElseRequired)
{
if (_elseValue != null)
{
throw new ElseAlreadyAddedException();
}
_elseValue = new Initialisable<TResult>(resultIfElseRequired);
return this;
}
}
これにより、次の 2 つの疑問が生じます。
- フィールドが初期化されているかどうかをテストする方法は既にありますか? 構造体である可能性があるため、nullにすることはできないため、そうではないと想定しています。私は何かを逃しましたか?
- 私は新しいバージョンで何も修正しておらず、セマンティクスで遊んでいるような気がします。最初のバージョンは問題なく動作しますが、見苦しいと思います。この場合、ブールを使用しない正当な理由はありますか?