说我有一个像这样的简单班级:

public class ReferenceChanger<T>
{
    public T SavedElement { get; private set; }

    public ReferenceChanger(T elementToSave)
    {
        SavedElement = elementToSave;
    }

    // This method would change the original variable (given as a constructor argument)
    public void SetNewReference(T newElement)
    {
        SavedElement = newElement;
    }
}


此类保存分配给其构造函数的元素,无论元素是什么。但是,“ SavedElement”(其后备字段)是对实例创建时给定的对象的引用。

有什么方法可以保存对变量的引用(就像使用ref关键字一样),以便如果传递给构造函数的原始项发生更改,则SavedElement会自动反映更改,就好像该对象是使用ref关键字传递的一样? (即使我使用ref关键字,也无法以这种方式保存引用。)

更新以使意图更清晰:

public class ExampleClass
{
    public List<int> Numbers { get; set; }
}

public static void Main()
{
    ExampleClass temp = new ExampleClass();
    temp.Numbers = new List<int>() { 1, 2, 3 };

    ReferenceChanger<List<int>> changer = new ReferenceChanger<List<int>>(temp.Numbers);
    // Here, a reference to the List<int> instance (containing 1,2,3) is stored in changer's SavedElement

    // Then I do this:
    changer.SetNewReference(new List<int>() { 5, 6, 7 });

    // Now, only changer's SavedElement was changed, but temp's property Numbers was not changed.
    // Is there a way to change the temp's property Numbers from the changer?
}

最佳答案

听起来您正在寻找TypedReference__makeref关键字。

警告:它们的文档记录不充分,不在C#的标准化部分中。

this question.中有很多信息

10-06 04:21