【发布时间】:2010-12-13 21:26:19
【问题描述】:
我有以下代码:
string acctStatus = account.AccountStatus.ToString();
if (!SettableStatuses().Any(status => status == acctStatus))
acctStatus = ACCOUNTSTATUS.Pending.ToString();
注意 account.AccountStatus 是一个 ACCOUNTSTATUS 类型的枚举。在第二行,ReSharper 向我发出了 acctStatus 的警告“访问已修改的闭包”。当我执行推荐的操作时,复制到局部变量,它会将代码修改为以下内容:
string acctStatus = realAccount.AccountStatus.ToString();
string s = acctStatus;
if (!SettableStatuses().Any(status => status == s))
acctStatus = ACCOUNTSTATUS.Pending.ToString();
为什么这比我原来的更好或更可取?
编辑
它还建议将局部变量包装在数组中,它会产生:
string[] acctStatus = {realAccount.AccountStatus.ToString()};
if (!SettableStatuses().Any(status => status == acctStatus[0]))
acctStatus[0] = ACCOUNTSTATUS.Pending.ToString();
这对我来说似乎很古怪。
【问题讨论】:
-
检查这个 SO 问题和接受的答案,可能会有所帮助。 stackoverflow.com/questions/235455/access-to-modified-closure