私のAsp.net MVCプログラムでは、このようなコントローラにアクションメソッドがあります。同じ機能を実行する2つのコードがあります。質問は、なぜコメントコードがうまくいかないのですか?(私はビューをチェックして、コメントコードは私が見たいものを生成することはできませんが、もう一方は可能です)。おそらく、forループと何か関係があります。 i
は、forループ終了後にメモリから消えます。どんな考えも価値がある、ありがとう。c#:IEnumerableがループの外側で動作しない
//
// GET: /Account/Register
[AllowAnonymous]
public ActionResult Register(string code, string state)
{
……
var departments = new List<IEnumerable<SelectListItem>>();
//functionally equal, but not work.
// for (int i=0; i< db.Settings.Find(1).MaxDepartmentLevel;i++)
// {
// departments.Add(ToSelectListItems(db.Departments.Where(r => r.Level == i+1)));
//
// }
//these work.
departments.Add(ToSelectListItems(db.Departments.Where(r => r.Level == 1)));
departments.Add(ToSelectListItems(db.Departments.Where(r => r.Level ==2)));
departments.Add(ToSelectListItems(db.Departments.Where(r => r.Level == 3)));
var registerViewModel = new RegisterViewModel()
{
OpenId = wechatUserAccessToken.openid,
Departments = departments,
AvatarImageUrl = avatarImageUrl.TrimEnd('0') + "96"
};
return View(registerViewModel);
}
編集: db.Settings.Find(1).MaxDepartmentLevel
= 3。
あなたは変数iを維持したい場合は
http://csharpindepth.com/Articles/Chapter5/Closures.aspx
が、なぜこのような何かをしない: int型私= 0 ; ToSelectListItems(db.Departments.Where(r => r.Level == i + 1)) for(i = 0; i
'' 'db.Settings.Find(1).MaxDepartmentLevel'''の値は何ですか? – tym32167
これは同じコードではありません。db.Settings.Find(1).MaxDepartmentLevel == 3、0と思われます –