0

我是 LINQ 的新手,并使用它来查询 XML(这太不可思议了)。我有以下函数,它只是为XML 中的List每个后代创建一个新对象。:list

public void ParseLists(XDocument xDoc)
{
    XNamespace ns = xDoc.Root.Name.Namespace;
    AddRange((
        from e in xDoc.Descendants(ns + "list")
        select new List
        {
            Id = (string)e.Element(ns + "id"),
            ItemsLink = (string)e.Element(ns + "items-link"),
            BatchLink = (string)e.Element(ns + "batch-link"),
            Name = (string)e.Element(ns + "name"),
            IsVendor = (string)e.Element(ns + "is-vendor"),
            Levels = (string)e.Element(ns + "levels")
        }).ToList());
}

下面是 XML 的一个片段:

<lists xmlns="www.namespaceurl.com" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <list>
    <batch-link>www.batchlinkurl.com</batch-link>
    <id>12345</id>
    . . .
  </list>
</lists>

问题:在构建List对象时,我最初使用Convert.ToString()而不是(string)将元素值作为字符串获取。我发现的是:

Convert.ToString(e.Element(ns + "id"))将返回<id>12345</id>

然而

(string)e.Element(ns + "id")将返回12345

有人可以解释为什么返回值不同吗?

4

1 回答 1

1

Convert.ToString(...)将调用被覆盖的ToString()方法,该方法将元素本身作为字符串返回。

(string) ...将使用重载的显式转换为字符串运算符,它将元素的文本内容作为字符串返回。

于 2012-08-22T14:02:02.917 回答