我在使用 lambda 表达式在定义 lambda 表达式的函数中引用本地值来设置结构中的值时遇到问题。如果我理解正确,该结构是在 lambda 函数中按值传递的,但我希望它通过引用传递。我不知道怎么做。
测试代码:
public struct partialData
{
public int foo;
}
public struct futureData
{
public int bar;
}
// if you change this to a class, everything works as desired.
public struct someStruct
{
public partialData pd;
public futureData fd;
}
class Apple
{
private Action<object> toBeSet;
public someStruct makeStruct(partialData pd)
{
someStruct ss = new someStruct();
ss.pd = pd;
toBeSet = new Action<object>(
(futureValue) => ss.fd = (futureData)futureValue
);
return ss;
}
public void futureSet(futureData fd)
{
toBeSet.Invoke(fd);
}
}
class Program
{
static void Main(string[] args)
{
partialData pd;
pd.foo = 1;
futureData fd;
fd.bar = 2;
Apple ap=new Apple();
someStruct ss= ap.makeStruct(pd);
ap.futureSet(fd);
// I'd like it to be 1,2, it results in 1,0
Console.WriteLine("foo is: "+ss.pd.foo + ", bar is: "+ss.fd.bar);
Console.In.ReadLine();
}
}
注意:这些结构是由其他人编写的(并且用于互操作),我无法将它们更改为类。我喜欢我目前的设计,所以我希望有一种方法来保持这种设计,但只是让 Action 中的结构表现为一个类。不更改为类的另一个原因是某些结构嵌套得很深,并且需要花费更多的精力来更新,而不是我认为应该有的必要。