C# C-如何声明一个变量,该变量将由if语句中的数据库调用填充?
我希望从if语句内部的数据库调用中获取数据,然后我希望能够在稍后的页面中处理if语句外部的数据 那么,为什么这不起作用呢?我能做些什么来让它工作呢?我刚刚收到错误消息编译器错误消息:CS0103:名称“selectedData”在当前上下文中不存在。我试图在if语句之外声明一个selectedData变量,这样它就可以使用了,但我似乎不知道如何正确地执行该操作C# C-如何声明一个变量,该变量将由if语句中的数据库调用填充?,c#,webmatrix,C#,Webmatrix,我希望从if语句内部的数据库调用中获取数据,然后我希望能够在稍后的页面中处理if语句外部的数据 那么,为什么这不起作用呢?我能做些什么来让它工作呢?我刚刚收到错误消息编译器错误消息:CS0103:名称“selectedData”在当前上下文中不存在。我试图在if语句之外声明一个selectedData变量,这样它就可以使用了,但我似乎不知道如何正确地执行该操作 @{ var testVariable = "blah"; //set cache key and query ba
@{
var testVariable = "blah";
//set cache key and query based their being a craft name
if(testVariable.Length > 0){
var db = Database.Open("Connection");
var selectedData = db.Query("SELECT * FROM Products");
}
}
<div>
@foreach (var row in selectedData){
@row.ContentTitle <br />
@row.ContentShortDescription <br />
}
</div>
这是一个范围问题。您需要在if范围之外声明变量
@{
var testVariable = "blah";
Type selectedData;
//set cache key and query based their being a craft name
if(testVariable.Length > 0){
var db = Database.Open("Connection");
selectedData = db.Query("SELECT * FROM Products");
}
}
<div>
@foreach (var row in selectedData){
@row.ContentTitle <br />
@row.ContentShortDescription <br />
}
</div>
我对这里的字体不熟悉,所以我用了这个字体。在那里替换合适的类型。请注意,此代码段也不能确保在进入循环之前正确设置selectedData。你也应该处理这个问题。这是一个关于范围的问题 基本上,在C语言中,当您打开一个新的{}集合时,您将声明一个新的作用域。在该范围内创建的变量在退出时将被销毁。这是一个相当简单的解释,不完全准确,但很容易理解
{
var testVariable = "blah";
//set cache key and query based their being a craft name
if(testVariable.Length > 0)
{
var db = Database.Open("Connection");
// Create a new variable.
var selectedData = db.Query("SELECT * FROM Products");
}
// Variable doesn't exist anymore.
}
要解决此问题,请执行以下操作:
{
var testVariable = "blah";
// Create variable outside the if scope
var selectedData = null; // Won't compile, compiler cannot find valid variable type.
//set cache key and query based their being a craft name
if(testVariable.Length > 0)
{
var db = Database.Open("Connection");
// Assign a value to a variable
selectedData = db.Query("SELECT * FROM Products");
}
// Variable still exist!
}
// Here, variable would cease to exist. :(
但是在这里,代码不会编译,因为编译器不知道selectedData是什么类型,因为我在创建时将其赋值为null。因此,假设selectedData属于Data类型:
之后,如果选择了Data!=null以知道数据是否被正确查询。您应该注意,这实际上不会编译。@JordanKaye:很可能。我仍然很难理解为什么人们到处都是垃圾。这只会使跟踪变量类型变得更加困难。这将是错误CS0818-隐式类型的局部变量必须是initialized@LightStriker我同意。我只在for循环变量声明中使用它。但原因是var anything=null不会编译,因为在声明var时需要给它一个类型。@sethflowers:编辑了我的答案以说明为什么它不会编译。我想这就是我的问题所在。我尝试添加var selectedDate=;您在此处添加了行,但随后我收到以下错误编译器错误消息:CS0029:无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“string”。所以我想我不能使用var作为类型,但是它是什么类型呢?这是我在帖子中提到的。。使用db.Query返回的类型。我不知道那是什么。查看文档。尝试使用IEnumerable selectedData=null@GmG-谢谢!这正是我所需要的,而且我成功了!谢谢大家帮助我理解!
{
var testVariable = "blah";
// Create variable outside the if scope
Data selectedData = null; // Now it compiles. :)
//set cache key and query based their being a craft name
if(testVariable.Length > 0)
{
var db = Database.Open("Connection");
// Assign a value to a variable
selectedData = db.Query("SELECT * FROM Products");
}
// Variable still exist!
}
// Here, variable would cease to exist. :(