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 変更なし :-(」が表示されるだけです。null 以外の Foo インスタンスを渡し、プロパティ「A」を変更した (新しいインスタンスを返すのに対して) テストをわずかに変更しました。それは問題なく機能しました (つまり、オブジェクト参照を関数に渡すときに期待するのと同じように、既存のオブジェクトを変更できます)、デリゲートから新しいインスタンスを取得できないようです。
そう?コードで何か間違ったことをしているだけですか?これはまったくできますか?これが機能しない理由を理解したいと思います。