在声明ASP.NET之前不能使用局部变量

时间:2008-11-11 01:19:27

标签: c# asp.net-mvc

我有一些像这样的代码:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Save([Bind(Prefix="")]Person person)
{
    String s = person.property;
    /* ... */
}

但是它抛出错误:“在声明”之前不能使用局部变量'person'。

我错过了什么简单的事情?

3 个答案:

答案 0 :(得分:15)

您很可能收到此错误,因为稍后在同一代码块中声明了相同的变量。

根据编译器规则,变量引用将引用具有相同块的匹配声明的默认值,即使相同的声明存在于逻辑范围流中的块之外。

简而言之,检查变量是否在同一个应用程序块中稍后被声明(几行向下)。

答案 1 :(得分:4)

好吧,这只是一些非常奇怪的错误 - 如果变量被命名为特定名称它不起作用,对于任何其他名称,它确实有效......

答案 2 :(得分:2)

我对名为endingYear的声明变量有同样的问题。

在此声明:

        public ChartData(MetricInfo metricInfo, MetricItem[] metricItems) : this()
        {
            int endingYear = 0;

在方法中,这不是问题:

            endingYear = endingDate.Year;

但是当我在Case语句中引用了相同的varable时,我得到了“在声明之前不能使用局部变量”错误,即使变量在intelesense中也是如此:

                case "QRTR_LAST_FULL_QRTR":
                    if (metricInfo.CalendarType == "CALENDAR")
                    {
                        switch (endingDate.Month)
                        {
                            case 1:
                            case 2:
                            case 3:
                                loopControl = 4;
                                endingYear = endingDate.Year - 1;

根据Matt的结果,我尝试将变量名称更改为endYear,问题就消失了。很奇怪,浪费了半个小时左右。如果不是这个帖子的帖子那么可能会有更大的时间损失。