该名称不存在。在if中设置变量

时间:2013-03-21 20:21:27

标签: c#

我是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;
    }

6 个答案:

答案 0 :(得分:4)

您需要了解scope - 特别是块范围。

newsyreturn语句的内部作用域中声明,它不可用。

在外部范围内声明它,你会没事的:

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;
}

请注意newsy块之外如何声明while(但未分配)。另请参阅while内部如何分配newsy,但没有新的声明(这不合法)。

值得注意的是,如果Name既不是"news"也不是"link"newsy将是null - 它可能是也可能不是你想要的 - 你可以在声明期间总是分配一个空字符串数组:

string[] newsy = new string[] {};

答案 1 :(得分:2)

您需要在if块之外创建新闻(仅一次)。

这里重要的概念是变量的“范围”。在C#中声明变量时,它仅存在于包含声明的{ ... }最里面集之间。

因此,在您的代码中,如果名称为"news",则创建一个名为newsy的新字符串变量 - 但该变量位于{ ... {{1在}之后,一旦程序退出它们就消失了。如果名称为if,则创建一个名为"link"的(另一个!)新字符串变量,但该变量在newsy的末尾也会消失。无论哪种方式,当你到达if语句时,仍然没有return

所以你需要在newsy语句的同一级别声明newsy - 在函数体周围的大括号内,但不要在return体周围的任何一个或任何while s:

if

...

现在,您还必须更改赋值,因为如果在其中一个内部块中执行 XmlTextReader textReader = new XmlTextReader(URL); string[] newsy; while (textReader.Read()) { ,您仍将创建一个仅存在于该块内并隐藏外部块的新变量。因此,不要声明它(使用string[] newsy),而只是分配给现有的,没有类型声明:

string[]

这应该有用。

答案 2 :(得分:2)

您需要在newsy循环之外声明while

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;
    }

答案 3 :(得分:1)

试试这个:

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;
        }

答案 4 :(得分:1)

当你在一个块中声明一个变量(甚至是一个if块)时,它仍然保持在该级别的作用域:

if (textReader.Name == "news") {
    string News = textReader.ReadElementContentAsString();
    string[] newsy = { News };
}

// newsy no longer exists

为了返回newsy,您需要在外部范围声明或立即返回。

    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;

答案 5 :(得分:0)

在while语句之前声明string[] newsy;,然后像这样使用newsy: newsy = {Link},这将解决您的问题。