[英]The name does not exist. Setting variables inside if
我是C#的初学者,正在制作一个简单的应用程序。 但是我仍然不明白如何从该函数返回称为“ newsy”的数组。 我无法在数组内设置此变量。 我有这个错误:
名称“ newsy”在当前上下文中不存在。
请帮我。
private string[] get_news(string URL)
{
XmlTextReader textReader = new XmlTextReader(URL);
while (textReader.Read())
{
if (textReader.NodeType == XmlNodeType.Element)
{
if (textReader.Name == "news") {
string News = textReader.ReadElementContentAsString();
string[] newsy = { News };
}
if (textReader.Name == "link")
{
string Link = textReader.ReadElementContentAsString();
string[] newsy = { Link };
}
}
}
return newsy;
}
您需要了解范围 -尤其是块范围。
newsy
在return
语句的内部范围内声明,在该范围内不可用。
在外部范围中声明它,您会很好的:
private string[] get_news(string URL)
{
XmlTextReader textReader = new XmlTextReader(URL);
string[] newsy = null;
while (textReader.Read())
{
if (textReader.NodeType == XmlNodeType.Element)
{
if (textReader.Name == "news") {
string News = textReader.ReadElementContentAsString();
newsy = new string[] { News };
}
if (textReader.Name == "link")
{
string Link = textReader.ReadElementContentAsString();
newsy = new string[] { Link };
}
}
}
return newsy;
}
注意在while
块外如何声明(但不分配给) newsy
。 另请参阅while
,如何对newsy
进行了赋值,但是没有新的声明(这是不合法的)。
值得注意的是,如果Name
是没有一个"news"
或"link"
, newsy
将是null
-这可能是也可能不是你想要的东西-你可以声明中始终分配一个空字符串数组:
string[] newsy = new string[] {};
您需要在if
块之外创建新闻(仅一次)。
此处的重要概念是变量的“范围”。 在C#中声明变量时,它仅存在于包含声明的{
... }
最里面的一组之间。
因此,在你的代码,如果名称是"news"
,创建一个名为新字符串变量newsy
-而是集的内部变量生活{
... }
后if
,一旦程序退出他们走了。 如果名称是"link"
,则创建一个(不同的!)新字符串变量,称为newsy
,但是在if
末尾也会消失。 无论哪种方式,到您return
语句时,仍然没有newsy
。
因此,您需要在与return
语句相同的级别上声明newsy
在函数主体中的花括号内,而在while
主体或任何if
周围的花括号内:
XmlTextReader textReader = new XmlTextReader(URL);
string[] newsy;
while (textReader.Read())
{
...
现在,您还必须更改分配,因为如果在这些内部块之一中执行string[] newsy
,您仍将创建一个仅存在于该块内部并隐藏外部块的新变量。 因此,无需声明它(使用string[]
),而只需将其分配给现有类型,而无需类型声明:
if (textReader.Name == "news") {
string News = textReader.ReadElementContentAsString();
newsy = { News };
}
那应该起作用。
您需要在while
循环之外声明newsy
:
private string[] get_news(string URL)
{
string [] newsy;
XmlTextReader textReader = new XmlTextReader(URL);
while (textReader.Read())
{
if (textReader.NodeType == XmlNodeType.Element)
{
if (textReader.Name == "news") {
string News = textReader.ReadElementContentAsString();
newsy = { News };
}
if (textReader.Name == "link")
{
string Link = textReader.ReadElementContentAsString();
newsy = { Link };
}
}
}
return newsy;
}
尝试这个:
private string[] get_news(string URL)
{
XmlTextReader textReader = new XmlTextReader(URL);
string[] newsy=null;
while (textReader.Read())
{
if (textReader.NodeType == XmlNodeType.Element)
{
if (textReader.Name == "news") {
string News = textReader.ReadElementContentAsString();
newsy = { News };
}
if (textReader.Name == "link")
{
string Link = textReader.ReadElementContentAsString();
newsy = { Link };
}
}
}
return newsy;
}
当您在一个块(甚至一个if块)中声明一个变量时,它的作用域仍处于该级别:
if (textReader.Name == "news") {
string News = textReader.ReadElementContentAsString();
string[] newsy = { News };
}
// newsy no longer exists
为了返回新闻,您需要在外部范围内声明或立即返回它。
XmlTextReader textReader = new XmlTextReader(URL);
string[] newsy;
while (textReader.Read())
{
if (textReader.NodeType == XmlNodeType.Element)
{
if (textReader.Name == "news") {
string News = textReader.ReadElementContentAsString();
newsy = { News };
}
if (textReader.Name == "link")
{
string Link = textReader.ReadElementContentAsString();
newsy = { Link };
}
}
}
return newsy;
声明string[] newsy;
在while语句之前,然后像这样使用newsy: newsy = {Link}
,这将解决您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.