[英]Why can't a C# structure return a reference to its member field?
struct Foo {
int i;
public ref int I => ref i;
}
This code raises compile error CS8170, but if Foo
is a class, it doesn't. 此代码引发编译错误CS8170,但如果
Foo
是一个类,它不会。 Why can a structure not return a member as a reference? 为什么结构不能将成员作为引用返回?
I think I found a way around it: 我想我找到了解决办法:
class Program
{
static void Main(string[] args)
{
Foo temp = new Foo(99);
Console.WriteLine($"{Marshal.ReadInt32(temp.I)}");
Console.ReadLine();
}
}
struct Foo
{
int i;
public IntPtr I;
public Foo(int newInt)
{
i = newInt;
I = GetByRef(i);
}
static unsafe private IntPtr GetByRef(int myI)
{
TypedReference tr = __makeref(myI);
int* temp = &myI;
IntPtr ptr = (IntPtr)temp;
return ptr;
}
}
Not that its a good idea- too many dire warnings. 这不是一个好主意 - 太多可怕的警告。 However, I do believe it is achieving what you want by returning a reference to the struct member, which you can then marshal to get the original value.
但是,我确实认为它是通过返回对struct成员的引用来实现你想要的,然后你可以编组以获得原始值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.