にC#のオブジェクトをUnboxのために: 私はこのような何かをしようとしているどのように動的型
void someMethod(TypeA object) { ... }
void someMethod(TypeB object) { ... }
object getObject()
{
if (...) return new TypeA();
else return new TypeB();
}
object obj = getObject();
(obj.GetType()) obj; // won't compile
someMethod(obj);
はもちろん、私はここで混乱しています。
if (obj.GetType() == typeof(TypeA)) obj = (TypeA)obj;
else if (obj.GetType() == typeof(TypeB)) obj = (TypeB)obj;
- 実行時にこれを行う方法はありませんか?
EDIT 私はそれがおそらく最良のデザインの選択ではないようだと思うので、ここではコンテキストです。上記のコードのポイントは、Mongo DBのRepository基底クラスです。私はそれが異なる種類のテーブルを扱うことができるようにしたい。したがって、someMethod()は実際にはです。を削除してください。 TypeAおよびTypeBは、、ObjectIDおよびGuidです。一番下のコードはタイプアグノスティックの一部ですのIDを文字列として受け入れるメソッドを削除します。 getObject()はIDパラメータを解析するメソッドです。
は、あなたがそれに関連付けられた実行時型情報付きタイプ 'T'をconflatingている(構造体である
TypeA
ないとTypeB
、とにかくアンボクシング ...ではないことに注意してください) T) 'である。彼らは同じものではなく、お互いに代わることはできません。 –デザインの選択肢が増える可能性がありますが、コードの実際の目標は投稿から除外されました。おそらく、あなたがこのコードで達成しようとしていたことを教えていただければ、問題に解決策を書く上でより良い、全く異なる方法を提供することができます。 –
@カークウォール、私は違いを知っている、私はちょうど私がやろうとしていたことを説明したい。 – McGarnagle