我一直在搜索,但我找不到任何方法来存储对某个变量中另一个变量的引用.我正在尝试创建一个类来撤消用户完成的事情;
class UndoAction
{
public object var;
public object val;
public UndoAction(ref object var, object val)
{
this.var = var;
this.val = val;
}
public static List<UndoAction> history = new List<UndoAction>();
public static void AddHistory(ref object var, object val)
{
history.Add(new UndoAction(ref var, val));
}
}
Run Code Online (Sandbox Code Playgroud)
我想你可以看到我在这里想要实现的目标.
我跑的问题;
this.var = var;
Run Code Online (Sandbox Code Playgroud)
不存储引用,而是存储引用的'var'的值.我如何存储引用本身,所以我可以简单地运行;
this.var = val;
Run Code Online (Sandbox Code Playgroud)
在我的情况下,"撤消"一个动作?
Rom*_*kov 10
标准安全C#根本不支持这一点.底层框架几乎包含所有必要的概念,但它们不是用C#语言公开的.但即使这样,这样的引用也不能存储在字段中.
你可以拥有的最好的是将它包装在一些使用委托的类中.相比之下,这显然相当昂贵,但除非您在紧密循环中修改内容,否则这可能足够好:
class VarRef<T>
{
private Func<T> _get;
private Action<T> _set;
public VarRef(Func<T> @get, Action<T> @set)
{
_get = @get;
_set = @set;
}
public T Value
{
get { return _get(); }
set { _set(value); }
}
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
var myVar = ...
var myVarRef = new VarRef<T>(() => myVar, val => { myVar = val; });
...
myVarRef.Value = "47";
Console.WriteLine(myVar); // writes 47
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8399 次 |
| 最近记录: |