2

.net CLR オブジェクトはすべてのクラス オブジェクトのベースですが、基本型 (int、float など) ではありません。Object のような基本型を使用するにはどうすればよいですか? すなわちBoost.Variant のような?

: -

object intValue( int(27) );
if (intValue is Int32)
    ...

object varArray[3];
varArray[0] = float(3.141593);
varArray[1] = int(-1005);
varArray[2] = string("String");
4

4 に答える 4

4

objectは、ボクシングを介して、すべての .NET 型の有効な (ルート) 基本クラスです。それはうまくいくはずです-タイプを使用isまたは確認するだけです...GetType()

object[] varArray = new object[3];
varArray[0] = 3.141593F;
varArray[1] = -1005;
varArray[2] = "String";
于 2009-06-04T18:54:46.030 に答える
3

あなたは C++/CLI を使用していると述べたので、次のことができるはずです。

array<Object^>^ varArray =  gcnew array<Object^>(3);

varArray[0] = 3.141593;
varArray[1] = -1005;
varARray[2] = "String";

double val = *reinterpret_cast<double^>(varArray[0]);
于 2009-06-04T19:06:18.783 に答える
1
object varArray[3] = new object[3];
varArray[0] = 3.141593;
varArray[1] = -1005;
varArray[2] = "String";
于 2009-06-04T18:55:59.350 に答える
0

ボクシングの回答ありがとうございます。戻り値をボックス化する必要があります。

    Object ^ createFromString(String ^ value)
    {
         Int32 i( Convert::ToInt32(value) );
         return static_cast< Object ^ >(i);
    }

オブジェクト ポインターにキャストして、戻り値をボックス化する必要があります。直感的!:)

そして、次のように取得します。

    void writeValue(Object ^ value, BinaryWriter ^ strm)
    {
        Int32 i( *dynamic_cast< Int32 ^ >(value) );
        strm->Write(i);
    }
于 2009-06-04T19:10:17.183 に答える