无法声明名为'selectedData'的局部变量

时间:2013-10-24 19:28:47

标签: c#

抱歉,我是C#的新手。我正在做一个基本的在线课程,并且我已经修改了其中一个示例中的代码,因为我正在尝试编写一个程序,该程序可以显示特定类型的电影列表,其中包含给定字符串。

当我尝试在浏览器上启动应用时,收到以下错误消息:

编译器错误消息:CS0136:无法在此范围内声明名为'selectedData'的局部变量,因为它会为'selectedData'赋予不同的含义,'selectedData'已在'parent或current'范围内用于表示其他内容

=============================================== ==================

来源错误:

第12行:searchGenreS = Request.QueryString [“searchGenre”]; 第13行:searchTitleS =“%”+ Request [“searchTitle”] +“%”; 第14行:var selectedData = db.Query(selectCommand,searchGenreS,searchTitleS); 第15行:
第16行:}

源文件:c:\ Users \ Charles \ Documents \ My Web Sites \ WebPagesMovies \ MoviesCombinedQuery.cshtml Line:14

以下是代码:

@{
var db = Database.Open("WebPagesMovies") ;
var selectCommand = "SELECT * FROM Movies";
var searchTerm = "";
var searchGenreS = "";
var searchTitleS = "";
var selectedData = "";

if((!Request.QueryString["searchGenre"].IsEmpty() ) && (!Request.QueryString["searchTitle"].IsEmpty()  ) )
{
    selectCommand = "SELECT * FROM Movies WHERE Genre = @0 AND Title LIKE @1";
    searchGenreS = Request.QueryString["searchGenre"];
    searchTitleS = "%" + Request["searchTitle"] + "%";
    var selectedData = db.Query(selectCommand, searchGenreS, searchTitleS);

}
else
{
  if(!Request.QueryString["searchGenre"].IsEmpty() )
   {
    selectCommand = "SELECT * FROM Movies WHERE Genre = @0";
    searchTerm = Request.QueryString["searchGenre"];
   }

  if(!Request.QueryString["searchTitle"].IsEmpty() ) 
   {
    selectCommand = "SELECT * FROM Movies WHERE Title LIKE @0";
    searchTerm = "%" + Request["searchTitle"] + "%";
   }

  var selectedData = db.Query(selectCommand, searchTerm);

}   
 var grid = new WebGrid(source: selectedData, defaultSort: "Genre", rowsPerPage:3);

}

任何人都可以帮助我吗?

谢谢!

干杯!!

4 个答案:

答案 0 :(得分:2)

您要在selectedDataif机构中重新声明else。你不想这样做 - 你已经提前声明了变量。您只需将这些语句更改为分配到现有变量。所以这个:

var selectedData = db.Query(selectCommand, searchGenreS, searchTitleS);

变为:

selectedData = db.Query(selectCommand, searchGenreS, searchTitleS);

而且:

var selectedData = db.Query(selectCommand, searchTerm);

变为:

selectedData = db.Query(selectCommand, searchTerm);

我强烈怀疑你需要更改selectedData的类型 - 目前它是一个给定初始值的字符串 - db.Query是否也返回string?那对我来说似乎不太可能。

编辑:如上所述,看起来您只需要像这样对selectedData进行decalre:

IEnumerable<dynamic> selectedData = null;

答案 1 :(得分:0)

从分支代码中的selectedData中删除var

var selectedData = "";

if((!Request.QueryString["searchGenre"].IsEmpty() ) && (!Request.QueryString["searchTitle"].IsEmpty()  ) )
{
    selectCommand = "SELECT * FROM Movies WHERE Genre = @0 AND Title LIKE @1";
    searchGenreS = Request.QueryString["searchGenre"];
    searchTitleS = "%" + Request["searchTitle"] + "%";
    selectedData = db.Query(selectCommand, searchGenreS, searchTitleS);
}
else
{
    ....
 if(!Request.QueryString["searchTitle"].IsEmpty() ) 
   {
    selectCommand = "SELECT * FROM Movies WHERE Title LIKE @0";
    searchTerm = "%" + Request["searchTitle"] + "%";
   }

  selectedData = db.Query(selectCommand, searchTerm);

}   

当前代码正在做的是实例化一个名为selectedData的变量并将其设置为“”,然后尝试重新实例化一个与db.Query...同名的变量。

答案 2 :(得分:0)

变化

 var selectedData = db.Query(selectCommand, searchTerm);

 selectedData = db.Query(selectCommand, searchTerm);

您正在重新声明它,您不希望/不能这样做。

答案 3 :(得分:0)

感谢所有人解决VAR问题..

至于如何修复selectData的TYPE,这就是诀窍:

IEnumerable selectedData = null;

干杯!!

相关问题