在第一个代码片段中,ReSharper 6.0 给了我 "访问修改的闭包" 警告,针对的是 dr
标识符。
private IEnumerable<string> GetTheDataTableStrings(DataTable dt) {
foreach (DataRow dr in dt.Rows) {
yield return GetStringFuncOutput(() => dr.ToString());
}
}
我认为我已经基本理解了这个警告是想保护我免受的风险:在GetTheDataTableStrings输出被询问之前,dr
会多次更改,因此调用者可能得不到我期望的输出/行为。
但是R#对于第二段代码片段没有给我任何警告。
private IEnumerable<string> GetTheDataTableStrings(DataTable dt) {
return from DataRow dr in dt.Rows select GetStringFuncOutput(dr.ToString);
}
使用推导式语法时,如果我忽略这个警告/注意事项是否安全?
其他代码:
string GetStringFuncOutput(Func<string> stringFunc) {
return stringFunc();
}