Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在CLR/托管C++;?_C#_Clr_Managed C++_Variant - Fatal编程技术网

C# 如何在CLR/托管C++;?

C# 如何在CLR/托管C++;?,c#,clr,managed-c++,variant,C#,Clr,Managed C++,Variant,在.net中,CLR对象是所有类对象的基础,但不是基本类型(例如int、float等)。如何使用对象等基本类型? 比如说,你喜欢什么 例如:- 对象,通过装箱,是所有.NET类型的有效(根)基类。这应该可以正常工作-您只需要使用is或GetType()来检查类型 object[] varArray = new object[3]; varArray[0] = 3.141593F; varArray[1] = -1005; varArray[2] = "String"; 由于您提到您使用的是C+

在.net中,CLR对象是所有类对象的基础,但不是基本类型(例如int、float等)。如何使用对象等基本类型? 比如说,你喜欢什么

例如:-


对象
,通过装箱,是所有.NET类型的有效(根)基类。这应该可以正常工作-您只需要使用
is
GetType()
来检查类型

object[] varArray = new object[3];
varArray[0] = 3.141593F;
varArray[1] = -1005;
varArray[2] = "String";

由于您提到您使用的是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]);
array^varArray=gcnewarray(3);
varArray[0]=3.141593;
varArray[1]=-1005;
varARray[2]=“字符串”;
double val=*重新解释_cast(varArray[0]);

谢谢你的回答。我需要将我的返回值框起来,例如

    Object ^ createFromString(String ^ value)
    {
         Int32 i( Convert::ToInt32(value) );
         return static_cast< Object ^ >(i);
    }
对象^createFromString(字符串^value)
{
int32i(Convert::ToInt32(value));
返回静态_cast(i);
}
我需要通过强制转换到对象指针来框显返回值。直觉!:)

并检索为:

    void writeValue(Object ^ value, BinaryWriter ^ strm)
    {
        Int32 i( *dynamic_cast< Int32 ^ >(value) );
        strm->Write(i);
    }
void writeValue(对象^value,二进制编写器^strm)
{
Int32 i(*动态转换(值));
strm->Write(i);
}

这是在.net 2.0中。我认为3.0更具动态性,所以这可能是有可能的,但我只有VS2005,它不能使用.NET3.0。C#3.0是你所想的,它并不是真的更具动态性。您看到的“var”关键字并没有创建变体,只创建推断类型。var i=1;仍然使“i”成为int。@Nick:3.0与2.0相比没有更大的动态性;C#3.0有“var”,但那不是“variant”——它是“variant”,意思是“自动推断类型”。它仍然是静态类型的。C 4引入了“动态”抱歉,我实际上必须在托管C++中这样做。我实际上使用的是托管C++,而这并没有编译。我认为在C#中任何可能的东西在MC++中都应该是可能的?谢谢。我没有正确的语法来返回托管C++中的装箱值。是的,这是我的错。我有一个使用MC++库的c#GUI,我需要在这两个库中执行相同的操作,但我无法获得适用于MC++的正确语法。
    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);
    }