我正在學習/試用C#中的一些功能模式,並且我碰到了一個我不能解釋的凹凸。我相信這是一個簡單的答案(我希望),但我很難看到它。可能與封閉等有關,我無法擺脫箱子隱藏我的答案!我可以從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實例中傳遞並修改了屬性「A」(vs返回一個新實例)並且工作正常(也就是說,我可以改變現有對象就像我期望將對象引用傳遞給函數時一樣)我似乎無法從我的代理中獲取新實例。
那麼,我只是在代碼中做錯了什麼?這可以完成嗎?想知道爲什麼這不起作用。
我同意!沒有'out'parms ;-)所以,返回Tuple中的對象是我可能會去的方式。我認爲lazyberezovsky給了我一個關於'爲什麼'的線索,但我將其標記爲答案,因爲你已經給了我'需要的'和''的解決方法。謝謝 – robcom88 2013-03-16 14:52:34