抱歉,我是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行:}
以下是代码:
@{
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);
}
任何人都可以帮助我吗?
谢谢!
干杯!!
答案 0 :(得分:2)
您要在selectedData
和if
机构中重新声明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;
干杯!!