tags:

views:

133

answers:

2

I have this method

    public static List<Contact> Load(string filename)
    {
        if (!File.Exists(filename))
        {
            throw new FileNotFoundException("Data file could not be found", filename);

        }
        var contacts = 
            System.Xml.Linq.XDocument.Load(filename).Root.Elements("Contact").Select
            (
                x => new Contact() { //errors out here, XXXXXX
                            FirstName = (string)x.Element("FirstName"),
                            LastName = (string)x.Element("LastName"),
                            Email = (string)x.Element("Email")
                         }
            );
        return contacts.ToList();// is this line correct?, it should return List...
    }

I have Contacts.xml with Contact elements in it.

<Contacts>
    <Contact>
     <FirstName>Mike</FirstName>
     <LastName>Phipps</LastName>
     <Email>[email protected]</Email>
    </Contact>
    <Contact>
     <FirstName>Holly</FirstName>
     <LastName>Holt</LastName>
     <Email>[email protected]</Email>
    </Contact>
    <Contact>
     <FirstName>Liz</FirstName>
     <LastName>Keyser</LastName>
    </Contact>
</Contacts>

I have a contact.cs with this code

public class Contact
{
    public Contact(string firstName, string lastName, string email)
    {
        FirstName = firstName;
        LastName = lastName;
        Email = email;
    }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string PhoneNumber { get; set; }
    public string Address { get; set; }
}

on the line, where stamped with 'XXXXXX', how should i change the line to make it work?

+8  A: 

The constructor of your Contact class requires three arguments - firstName, lastName and email - but you're attempting to call the constructor with no arguments and then trying to set the properties using object initializer syntax.

To fix it you need to pass the three arguments into the constructor itself:

x => new Contact(
    (string)x.Element("FirstName"),
    (string)x.Element("LastName"),
    (string)x.Element("Email"));
LukeH
thanks, the code now compiles.
A: 

I think you're missing a public constructor in Contact.

public class Contact
{
    public Contact() {}

    public Contact(string firstName, string lastName, string email) {
        FirstName = firstName;
        LastName = lastName;
        Email = email;
    }

    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string PhoneNumber { get; set; }
    public string Address { get; set; }
}

Or just use the existing constructor.

Zyphrax