我试图在foreach中设置一个值,但我得到的错误是它在当前的竞争中存在。
这是我的代码;
@{
string sUsr = System.Web.HttpContext.Current.Request.ServerVariables["AUTH_USER"].ToLower();
var db = Database.Open("SQLServerConnectionString");
var selectUser = "SELECT * FROM USERS WHERE username = " + @sUsr;
}
@foreach (var userid in db.Query(selectUser))
{
var sReg = userid.userdisplayname;
var sAns = userid.usersign;
var smail = userid.usermail;
}
...some html code etc.
@sReg <---- The name sReg dosent exist in the current context
如果我尝试使用下面的代码,它会起作用,Hello World会在我的网页上呈现
@{ var myMessage = "Hello World"; }
...some html code etc.
@myMessage
答案 0 :(得分:1)
sReg
仅应用于foreach
循环内。
您在当前上下文错误中存在的原因是因为它不在范围内。
如果你想继续并对你的var sReg
做一些事情,你必须在循环中执行你想要做的任何操作,或者如果需要的话在外面宣布它。
希望这有帮助
答案 1 :(得分:1)
更改代码,以便在foreach循环范围之外定义sReg。你可以这样做:
var sReg;
@foreach (var userid in db.Query(selectUser))
{
sReg = userid.userdisplayname;
var sAns = userid.usersign;
var smail = userid.usermail;
}
现在可以在循环体外使用sReg的(last)值。
代码中定义的变量只有一个可用的有限区域,通常称为变量的“范围”。
阅读this article以了解有关C#范围的更多信息。
请注意,您可能会从查询中获得多个结果(除非您选择前1或类似结果)。在这种情况下,您的sReg变量只包含最后一次迭代的值,这可能不适合您。在这种情况下,列表可以拯救:http://www.dotnetperls.com/list