Tag: list comprehension

是否通过理解语法解决了“访问修改后的闭包”的问题?

ReSharper 6.0在第一个代码片段中为dr标识符提供了“访问修改后的闭包”警告。 private IEnumerable GetTheDataTableStrings(DataTable dt) { foreach (DataRow dr in dt.Rows) { yield return GetStringFuncOutput(() => dr.ToString()); } } 我想我对这个警告试图保护我的基本理解是:在调查GetTheDataTableStrings的输出之前, dr会多次更改,因此调用者可能无法获得我期望的输出/行为。 但是R#没有给我第二个代码片段的任何警告。 private IEnumerable GetTheDataTableStrings(DataTable dt) { return from DataRow dr in dt.Rows select GetStringFuncOutput(dr.ToString); } 使用理解语法时,放弃此警告/关注是否安全? 其他代码: string GetStringFuncOutput(Func stringFunc) { return stringFunc(); }