【发布时间】:2022-11-23 10:54:11
【问题描述】:
是否有可能获得一个指向装箱的非托管值类型的指针,而无需编写一个大型 switch 语句来为每个支持的类型执行强制转换?就像是:
object val; // Contains a boxed unmanaged value, such as int, long, byte, etc.
void* ptr = &val; // Obviously does not compile
DoStuffWithPointer(ptr);
代替
object val; // Contains a boxed unmanaged value, such as int, long, byte etc.
if (val.GetType() == typeof(byte))
{
var typedValue = (byte)value;
DoStuffWithPointer(&typedValue);
}
else if (val.GetType() == typeof(short))
{
var typedValue = (short)value;
DoStuffWithPointer(&typedValue);
}
else
// ... and so on
顺便提一句。我知道指针指向堆栈上的局部变量,一旦函数返回就会失效。没关系。
【问题讨论】:
-
为什么首先需要指针?
-
您可以使用
Unsafe.AsPointer<T>。应该做你正在寻找的东西。