我有一些像这样的代码:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Save([Bind(Prefix="")]Person person)
{
String s = person.property;
/* ... */
}
但是它抛出错误:“在声明”之前不能使用局部变量'person'。
我错过了什么简单的事情?
答案 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,问题就消失了。很奇怪,浪费了半个小时左右。如果不是这个帖子的帖子那么可能会有更大的时间损失。