私は、多くのクラスがよく知られているが順序付けられていないさまざまなタイプのオブジェクトのコンテナーである状況にいます。たとえば、コンテナーは次のようになります。
public class Container
{
public A A { get; private set; }
public B B { get; private set; }
public C C { get; private set; }
public bool StoreIfKnown(object o)
{
// TODO...
}
}
o
そのため、タイプの場合はプロパティにA
格納する必要があり、プロパティに入力するなどです。A
B
B
F# では、StoreIfKnown
メソッドは次のように記述できます (構文エラーを許してください。私の F# はあまり良くなく、かなり錆びています)。
match o with
| ?: A a -> A <- a; true
| ?: B b -> B <- b; true
| ?: C c -> C <- c; true
| _ -> false
しかし、C#では、唯一の方法はかなり冗長であるようです:
if (o is A)
{
this.A = (A)o;
return true;
}
if (o is B)
{
this.B = (B)o;
return true;
}
// etc.
return false;
テスト/キャストパターンを回避するためにキーワードを使用して実行できますがas
、これはより高速ですが、さらに冗長です。
C#でこれを行うエレガントな方法はありますか?