C# 将参数传递给具有更改引用的变量

问题描述 投票:0回答:1

我有以下代码片段作为我想要执行的操作的示例。在此示例中,我想打印“reference1”。

var reference1 = new TestValueClass() { AValue = "reference1" };
TestValueClass myPointer = null;
var useClass = new TestPointerUsage(myPointer);
myPointer = reference1;
Console.WriteLine(useClass.testValueClass.AValue);

我完全理解为什么它不起作用,因为在第三行中它采用了 myPointer 的引用,当前为“null”并将其存储在内部。

C# 中是否存在将指针的引用传递给对象而不是对象本身的概念?

最简单的解决方案是传递一个包含指针内部的对象,但我想不时检查是否还有其他解决方案。

谢谢

c# reference
1个回答
0
投票

考虑如果

myPointer
超出范围,但
TestPointerUsage
的实例仍然存在,会发生什么。
useClass.testValueClass
指什么?

如果

TestPointerUsage
ref struct
,那么你想要的就是可能的。 A
ref struct
只能生存在栈上,无法逃逸到堆中,所以不会出现上面的情况。

A

ref struct
可以有
ref
字段,这就是
testValueClass
应该有的样子。

public ref struct TestPointerUsage {
    public ref TestValueClass? testValueClass;
    
    public TestPointerUsage(ref TestValueClass? testValueClass) {
        this.testValueClass = ref testValueClass;
    }
}

public class TestValueClass {
    public required string AValue  { get; init; }
}

以下代码将打印“reference1”:

var reference1 = new TestValueClass { AValue = "reference1" };
TestValueClass? myPointer = null;
var useClass = new TestPointerUsage(ref myPointer);
myPointer = reference1;
Console.WriteLine(useClass.testValueClass?.AValue);
© www.soinside.com 2019 - 2024. All rights reserved.