C# 无法从对象列表中获取值

C# cannot get values from list of objects

我的主程序 class 调用 StronyElementuStrukt 过程

List<object> monthlyPages = new List<object>();
monthlyPages =  StronyElementuStrukt(loginGuid, "8B35134E10A8432DB1A8C06A58427988");

这是程序 - 一种构建 xml 节点列表并将其 returns 到主程序的方法 class:

public static List<object> StronyElementuStrukt(string LoginGUID, string LinkGUID)
{
    List<object> listPages = new List<object>();

    XmlDocument document = new XmlDocument(); // tworzenie nowego obiektu - dokument xml z odpowiedzia serwera
    document.LoadXml(response.Result); //wczytywanie xmla z odpowiedzia serwera do obiektu
    XmlNode pageNode = document.SelectSingleNode("/IODATA/PAGES/PAGE"); //deklaracja noda xmlowego

    if (pageNode != null) //jeżeli PAGE node istnieje
    {
        XmlNodeList nodeList = document.SelectNodes("//PAGE");

        foreach (XmlNode node in nodeList)
        {
            listPages.Add(node);
        }
        return listPages;
    }
}

在主程序中 Class 我需要获取 xml id 属性的值,我正在尝试这样做:

foreach (object monthlyPage in monthlyPages)
{
    Console.WriteLine(monthlyPage.Attributes["id"].Value);
}

问题是当我尝试获取 id 时出现以下错误:

Error 6 'object' does not contain a definition for 'Attributes' and no extension method 'Attributes' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)

你能告诉我如何在 foreach 循环中访问 xml 属性吗?请询问是否不够清楚。

将方法改为return一个List<XmlNode>

public static List<XmlNode> StronyElementuStrukt(string LoginGUID, string LinkGUID)
{
    List<XmlNode> listPages = new List<object>();

    XmlDocument document = new XmlDocument(); // tworzenie nowego obiektu - dokument xml z odpowiedzia serwera
    document.LoadXml(response.Result); //wczytywanie xmla z odpowiedzia serwera do obiektu
    XmlNode pageNode = document.SelectSingleNode("/IODATA/PAGES/PAGE"); //deklaracja noda xmlowego

    if (pageNode != null) //jeżeli PAGE node istnieje
    {
        XmlNodeList nodeList = document.SelectNodes("//PAGE");

        foreach (XmlNode node in nodeList)
        {
            listPages.Add(node);
        }
    }

    return listPages;
}

这样就可以了。

List<XmlNode> monthlyPages = StronyElementuStrukt(
    loginGuid, 
    "8B35134E10A8432DB1A8C06A58427988");

foreach (XmlNode monthlyPage in monthlyPages)
{
    Console.WriteLine(monthlyPage.Attributes["id"].Value);
}

请注意,您只需将 foreach 更改为将 monthlyPage 声明为 XmlNode 而不是 object,它就会为您进行转换。但最好具体说明要放入通用集合中的类型。

我将所有出现的地方从 List<object> 更改为 List<XmlNode>。所以代码现在看起来像这样: 主程序:

List<XmlNode> monthlyPages = new List<XmlNode>();
monthlyPages =  StronyElementuStrukt(loginGuid, "8B35134E10A8432DB1A8C06A58427988");
foreach (XmlNodemonthlyPage in monthlyPages)
{
    Console.WriteLine(monthlyPage.Attributes["id"].Value);
}

程序:

    public static List<XmlNode> StronyElementuStrukt(string LoginGUID, string LinkGUID)
{
        List<XmlNode> listPages = new List<XmlNode>();

        XmlDocument document = new XmlDocument(); // tworzenie nowego obiektu - dokument xml z odpowiedzia serwera
        document.LoadXml(response.Result); //wczytywanie xmla z odpowiedzia serwera do obiektu
        XmlNode pageNode = document.SelectSingleNode("/IODATA/PAGES/PAGE"); //deklaracja noda xmlowego

        if (pageNode != null) //jeżeli PAGE node istnieje
        {
            XmlNodeList nodeList = document.SelectNodes("//PAGE");

            foreach (XmlNode node in nodeList)
            {
                listPages.Add(node);
            }
            return listPages;
        }
    }