C# 在声明为ASP.NET之前,无法使用局部变量

C# 在声明为ASP.NET之前,无法使用局部变量,c#,asp.net-mvc,C#,Asp.net Mvc,我有一些这样的代码: [AcceptVerbs(HttpVerbs.Post)] public ActionResult Save([Bind(Prefix="")]Person person) { String s = person.property; /* ... */ } 但它抛出了一个错误:“不能在声明局部变量‘person’之前使用它” 我遗漏了什么简单的东西?好吧,这只是一个非常奇怪的错误-如果变量被命名为一个特定的名称,它就不起作用,对于任何其他名称它都起作用…很

我有一些这样的代码:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Save([Bind(Prefix="")]Person person)
{
    String s = person.property;
    /* ... */
}
但它抛出了一个错误:“不能在声明局部变量‘person’之前使用它”


我遗漏了什么简单的东西?

好吧,这只是一个非常奇怪的错误-如果变量被命名为一个特定的名称,它就不起作用,对于任何其他名称它都起作用…

很可能是因为同一个变量稍后在同一代码块中声明,所以您收到了这个错误

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


因此,简而言之,检查同一个应用程序块中的变量以后是否没有被声明(下面几行)。

我对一个名为endingYear的已声明变量也有同样的问题

声明如下:

        public ChartData(MetricInfo metricInfo, MetricItem[] metricItems) : this()
        {
            int endingYear = 0;
在该方法中,这不是一个问题:

            endingYear = endingDate.Year;
但是,当我在Case语句中引用同一个变量时,我得到了“不能在声明之前使用局部变量”错误,即使变量在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,但问题消失了。很奇怪,浪费了半个小时左右。如果没有这一系列帖子,可能会损失更大的时间。

通过结束这个问题,你(以及后面的任何人)现在没有机会理解“真正奇怪的错误”,这无疑是一个合理的解释。通过结束这个问题,你就削弱了你的能力!干杯,Robbfair,我认为这是我做的特别错误的事情,不适用于其他人。是的,我明白了,但这是在第一行-唯一的声明是所说行上的字符串和参数。仍然只是一个罕见的bug,可能与一些奇怪的编译有关。谢谢。在这样的时刻,人们会觉得自己很愚蠢。应该检查我的代码!