【发布时间】:2012-05-25 13:14:09
【问题描述】:
我有一个采用匿名函数参数的方法。该函数的参数由局部变量提供。
public void DoSomething<T>(Action<T> method) where T : new()
{
T instance = new T();
method.Invoke(instance);
}
我想防止创建闭包。当DoSomething<T> 完成时,局部变量应该超出范围。有没有办法在编译时对其进行约束?
这是我想避免的情况:
Foo capturedInstance = null;
DoSomething<Foo>(item => capturedInstance = item);
capturedInstance.Call();
【问题讨论】:
-
你为什么需要那个?应该注意闭包的外部代码。
-
@YoryeNathan 你是对的,我只是想知道是否有一种方法可以在不让用户做错事的情况下限制它。
-
用户总会做错事。程序员应该检查他并指导他解决错误。然而,信任其他程序员是你必须做的事情,至少是一点点。你只能封装和抽象你的代码。
标签: c# .net c#-4.0 closures anonymous-function