c#,lambda表达式,错误在哪里?

use*_*169 0 c# lambda

我有这个方法

    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...
    }
Run Code Online (Sandbox Code Playgroud)

我有Contact.xml和Contact元素.

<Contacts>
    <Contact>
        <FirstName>Mike</FirstName>
        <LastName>Phipps</LastName>
        <Email>mike@contoso.com</Email>
    </Contact>
    <Contact>
        <FirstName>Holly</FirstName>
        <LastName>Holt</LastName>
        <Email>holly@contoso.com</Email>
    </Contact>
    <Contact>
        <FirstName>Liz</FirstName>
        <LastName>Keyser</LastName>
    </Contact>
</Contacts>
Run Code Online (Sandbox Code Playgroud)

我有一个contact.cs与此代码

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; }
}
Run Code Online (Sandbox Code Playgroud)

在线上,加上'XXXXXX',我应该如何更改线路以使其工作?

Luk*_*keH 8

您的构造函数Contact类需要三个参数- firstName,lastName以及email-但你试图调用不带参数的构造函数,然后试图设置使用属性对象初始化语法.

要修复它,您需要将三个参数传递给构造函数本身:

x => new Contact(
    (string)x.Element("FirstName"),
    (string)x.Element("LastName"),
    (string)x.Element("Email"));
Run Code Online (Sandbox Code Playgroud)