我正在学习/尝试 C# 中的一些功能模式,但遇到了一个我无法解释的问题。我确定这是一个简单的答案(我希望如此),但我很难看到它。可能与闭包等有关,而我无法开箱即用是对我隐瞒了答案!
这是我的实验:我正在尝试从函数委托中返回特定类的全新实例。
public class Foo{
string A { get; set ; }
}
static void Main( string[] args ){
// the delegate...
Func<Foo,bool> someFunc = o => {
o = new Foo { A = "A new instance of o?" };
return true;
};
Foo foo = null; // was hoping to replace this via delegate
var myFunc = someFunc;
var result = myFunc( foo );
if ( foo == null )
Console.WriteLine( "foo unchanged :-(" );
else
Console.WriteLine( foo.A ); // hoping for 'A new instance of o?'
当然,我只是在我的输出中得到“foo 未更改 :-(”。我在测试中做了一点改动,我传入了一个非空 Foo 实例并修改了属性“A”(而不是返回一个新实例)和效果很好(也就是说,我可以像将对象引用传递给函数时所期望的那样改变现有对象)我似乎无法从我的委托中获取新实例。
所以?我只是在代码中做错了吗?这完全可以做到吗?很想知道为什么这不起作用。