В .net CLR Object является базой для всех объектов класса, но не для базовых типов (например, 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");
2
Nick 4 Июн 2009 в 22:52

4 ответа

Лучший ответ

object, посредством бокса, является эффективным (корневым) базовым классом для всех типов .NET. Это должно работать нормально - вам просто нужно использовать is или GetType() для проверки типов ...

object[] varArray = new object[3];
varArray[0] = 3.141593F;
varArray[1] = -1005;
varArray[2] = "String";
4
Marc Gravell 4 Июн 2009 в 18:54

Спасибо за боксерский ответ. Мне нужно упаковать возвращаемое значение, например

    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);
    }
0
Nick 4 Июн 2009 в 19:16
object varArray[3] = new object[3];
varArray[0] = 3.141593;
varArray[1] = -1005;
varArray[2] = "String";
1
John Saunders 4 Июн 2009 в 18:55

Поскольку вы упомянули, что используете 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]);
3
Reed Copsey 4 Июн 2009 в 19:06