StoriKnow
StoriKnow

Reputation: 5867

XLINQ: string vs Convert.ToString() when extracting element values

I am new to LINQ and using it to query XML (it's incredible). I have the following function which simply creates a new List object for each list descendant found in the XML.:

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

And here's a snippet of what the XML might look like:

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

The Question: When building the List objects, I initially used Convert.ToString() rather than (string) to get the elements values as a string. What I found was that:

Convert.ToString(e.Element(ns + "id")) will return <id>12345</id>

whereas

(string)e.Element(ns + "id") will return 12345.

Can someone explain why the return value is different?

Upvotes: 0

Views: 67

Answers (1)

Jon Skeet
Jon Skeet

Reputation: 1503090

Convert.ToString(...) will call the overridden ToString() method, which returns the element itself as a string.

(string) ... will use the overloaded explicit conversion to string operator, which returns the text contents of the element as a string.

Upvotes: 1

Related Questions