未处理的类型为'System.ArgumentNullException'附加信息:值不能为空

本文关键字:信息 不能 System 类型 未处理 ArgumentNullException | 更新日期: 2023-09-27 18:13:06

我已经创建了一个类Employee,如下所示

class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Gender { get; set; }
    public int Salary { get; set; }
    public static Employee[] GetAllEmployee()
    {
        Employee[] Emp = new Employee[5];
        Emp[0] = new Employee { Id = 101, Name = "Mery", Gender = "Female", Salary = 10000 };
        Emp[1] = new Employee { Id = 102, Name = "Lucy", Gender = "Female", Salary = 12000 };
        Emp[2] = new Employee { Id = 103, Name = "Jeny", Gender = "Female", Salary = 15000 };
        Emp[3] = new Employee { Id = 104, Name = "Lilly", Gender = "Female",Salary = 10000 };
        Emp[4] = new Employee { Id = 105, Name = "Sony", Gender = "Female", Salary = 17000 };
        return Emp;
    }

现在我想检索工资在10000以上的员工的姓名。所以我用了这个代码,但是它给出了错误需要什么修正呢?

IEnumerable<string> Names = from Emps in XDocument.Load(@"path'Data.xml")
                                                           .Descendants("Employee")
                            where (int)Emps.Element("Salary") > 10000
                            select Emps.Element("Name").Value;
foreach(string name in Names)
{
    Console.WriteLine(name);
    Console.ReadLine();
}

未处理的类型为'System.ArgumentNullException'附加信息:值不能为空

下面的代码可以工作。xml文档不能在根级有数组。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Xml.Serialization;
using System.IO;
namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:'temp'test.xml";
        static void Main(string[] args)
        {
            Company company = new Company();
            XmlSerializer serializer = new XmlSerializer(typeof(Company));
            StreamWriter writer = new StreamWriter(FILENAME);
            serializer.Serialize(writer, company);
            writer.Flush();
            writer.Close();
            writer.Dispose();
            IEnumerable<string> Names = from Emps in XDocument.Load(FILENAME)
                                                           .Descendants("Employee")
                                        where (int)Emps.Element("Salary") > 10000
                                        select Emps.Element("Name").Value;
            foreach (string name in Names)
            {
                Console.WriteLine(name);
            }
            Console.ReadLine();
        }
    }
    public class Company
    {
        [XmlElement("Employee")]
        public Employee[] employees = Employee.GetAllEmployee();
    }
    public class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Gender { get; set; }
        public int Salary { get; set; }
        public static Employee[] GetAllEmployee()
        {
            Employee[] Emp = new Employee[5];
            Emp[0] = new Employee { Id = 101, Name = "Mery", Gender = "Female", Salary = 10000 };
            Emp[1] = new Employee { Id = 102, Name = "Lucy", Gender = "Female", Salary = 12000 };
            Emp[2] = new Employee { Id = 103, Name = "Jeny", Gender = "Female", Salary = 15000 };
            Emp[3] = new Employee { Id = 104, Name = "Lilly", Gender = "Female", Salary = 10000 };
            Emp[4] = new Employee { Id = 105, Name = "Sony", Gender = "Female", Salary = 17000 };
            return Emp;
        }
    }
}