在foreach中设置var以便稍后使用

时间:2015-06-02 07:25:51

标签: c# razor

我试图在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

2 个答案:

答案 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