你會如何創建一個擴展方法,它使我做了以下(警告:exteme僞代碼)...在C#實現用VB聲明
class FooBar
{
Int32 Foo { get; set; }
String Bar { get; set; }
}
new FooBar().With(fb => new Func<FooBar, Object>(instance =>
{
// VB With magic
// NOTE: The instance parameter HAS to be by reference
instance.Foo = 10;
instance.Bar;
return new Object();
}));
如果你可以指定匿名函數不返回類型(void),上面看起來會更清晰...
new FooBar().With(fb => new Func<FooBar, void>(instance =>
{
instance.Foo = 10;
instance.Bar;
}));
這是最糟糕的類型的僞代碼。但我希望你明白這一點。
哦,快點!你先到那裏。 – Jamiec 2010-09-03 09:00:39
所以'fb'是通過引用,而不是價值,是嗎? – roosteronacid 2010-09-03 09:03:59
@roosteronacid - 假設'T'是一個類,那麼是的。如果你想強制執行這個方法,就會在'where T:class'方法上施加一個約束。見下面的答案。 – Jamiec 2010-09-03 09:05:34