dar*_*mos 2 .net c# nullable c++-cli
我有一个C++/CLI包装类,用于在C#和本机C++之间进行交互.我得到一个与之相关的奇怪错误System.Nullable.我理解,对于基本类型,System.Nullable<T>相当于T?.所以我这样做:
C#:
public int? RoboticsArmRotation {
get { return mRobotics.ArmRotation; }
}
Run Code Online (Sandbox Code Playgroud)
C++/CLI,界面:
virtual property System::Nullable<int>^ ArmRotation{ System::Nullable<int>^ get() = 0; }
Run Code Online (Sandbox Code Playgroud)
C++/CLI,具体类:
virtual property System::Nullable<int>^ ArmRotation {
System::Nullable<int>^ get() {
boost::optional<int> value = m_pNativeInstance->getArmRotation();
return value.is_initialized()? gcnew System::Nullable<int>(value.get()) : gcnew System::Nullable<int>();
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到了标题的编译错误.为了int?解决它而进行的转换,但是System.ValueType当我将可以为空的nullable定义为引用时,它就是我所说的.我可以离开演员并继续前进,还是我做错了什么?
你正在使用Nullable<int>^哪个是参考.由于运行时不直接支持具有值类型的引用,因此IL级别的实际类型是以C++/CLI支持的方式ValueType标记的Nullable<int>^,但C#不支持.对于C#,它只是键入为System.ValueType.
这对于nullables而言比对普通值类型更有意义,因为nullables被列为基础类型.
我建议不要在C++中将该字段声明为引用,而是使用简单的引用Nullable<int>.