2

私はこれについて少し調査しましたが、それはかなり不可能に思えますが、私の問題に十分に具体的な答えはありませんでした. 現在Stack<object>、複数の異なるタイプのオブジェクトをプッシュする があります。それらをプッシュする前に、それらをobject受け入れるようにボックスに入れます。オブジェクトを元のボックス化されていないタイプに自動的にボックス化解除する方法はありますか?

4

2 に答える 2

2

拡張メソッドOfType<OneOfTheTypes>()を使用して、正しい型にキャストされた特定の型のオブジェクトのみを取得できます。

オブジェクトが持つ実行時型と互換性のある型のコンパイル時型を持つ変数に、オブジェクトを自動的に変換することはできません。
変数の型はコンパイル時の型であり、コンパイル時にコンテンツがその型であるとコンパイラが認識していない場合。コンパイラは、スタック内の各オブジェクトが実際に持つランタイム タイプを認識していません。実行時の型がコンパイル時の型と実際に一致することを (キャストを使用して) コンパイラーに約束する必要があります。

しかし、率直に言って。この種の「自分のタイプを確認してください」は、設計不良の典型的な匂いです。同様のタイプのオブジェクトがある場合、または異なる種類のオブジェクトに異なる種類のストレージを使用する場合は、共通の基本クラスを使用してコードを設計してみてください。

于 2012-11-11T10:26:14.310 に答える
0

それを行う自動魔法の方法はありません。

これを試してみてください

var objT = (T)Convert.ChangeType(obj, typeof(T));

var tuple = new  Tuple<object, Type>(someObject, typeof(someObject));

stack.Push(tuple);
于 2012-11-11T10:25:22.850 に答える