水平太差,虽然认为Linq是个好东东,但有谁能教教我,怎么调试?
想做个通过XML做配置的方案,使用Linq
<root>
<schedules>
<idle>3600000</idle>
<schedule>
<dic>e:\</dic>
<schedulename>dhdp</schedulename>
<configfile>dhdpconfig.xml</configfile>
</schedule>
<schedule>
<dic>e:\</dic>
<schedulename>logdhdp</schedulename>
<configfile>logdhdpconfig.xml</configfile>
</schedule>
</schedules>
</root>
{
public string dic { get; set; }
public string schedulename { get; set; }
public string configfile { get; set; }
}
class Schedules
{
public int Idle { get; set; }
public List<Schedule> ScheduleList { get; set; }
}
{
static void Main(string[] args)
{
var xmlfn = @"Schedules.xml";
TestScheduleList(xmlfn);
TestSchedulesList(xmlfn);
TestSchedulesList2(xmlfn);
Console.ReadKey();
}
public static void TestScheduleList(string xmlfn)
{
XElement SchedulesXml = XElement.Load(xmlfn);
List<Schedule> ScheduleList = (
from ScheduleElement in SchedulesXml.Elements("schedules").Descendants("schedule")
select new Schedule
{
dic = ScheduleElement.Element("dic").Value,
schedulename = ScheduleElement.Element("schedulename").Value,
configfile = ScheduleElement.Element("configfile").Value
}
).ToList();
Console.WriteLine("测试ScheduleList");
foreach (var sc in ScheduleList)
{
Console.WriteLine(sc.configfile);
}
Console.ReadKey();
}
public static void TestSchedulesList(string xmlfn)
{
XElement SchedulesXml = XElement.Load(xmlfn);
var SchedulesList = from SchedulesElement in SchedulesXml.Elements("schedules")
select SchedulesElement;
Console.WriteLine("测试SchedulesList");
foreach (var scs in SchedulesList)
{
Console.WriteLine(scs.Value);
}
Console.ReadKey();
}
public static void TestSchedulesList2(string xmlfn)
{
XElement SchedulesXml = XElement.Load(xmlfn);
var SchedulesList = from SchedulesElement in SchedulesXml.Elements("schedules")
select new Schedules
{
Idle = (int)SchedulesElement.Element("Idle"),
ScheduleList = (
from ScheduleElement in SchedulesElement.Descendants("schedule")
select new Schedule
{
dic = ScheduleElement.Element("dic").Value,
schedulename = ScheduleElement.Element("schedulename").Value,
configfile = ScheduleElement.Element("configfile").Value
}
).ToList()
};
Console.WriteLine("测试SchedulesList");
foreach (var scs in SchedulesList)
{
Console.WriteLine(scs.ScheduleList.ToString());
}
Console.ReadKey();
}
}
在使用TestSchedulesList2有错误,不知怎样调试,错误如下:
未处理 System.ArgumentNullException
  Message="值不能为空。\r\n参数名: element"
  Source="System.Xml.Linq"
  ParamName="element"
  StackTrace:
       在 System.Xml.Linq.XElement.op_Explicit(XElement element)
       在 ConsoleApplication1.Program.<TestSchedulesList2>b__7(XElement SchedulesElement) 位置 D:\web\ConsoleApplication1\ConsoleApplication1\Program.cs:行号 170
       在 System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
       在 ConsoleApplication1.Program.TestSchedulesList2(String xmlfn) 位置 D:\web\ConsoleApplication1\ConsoleApplication1\Program.cs:行号 186
       在 ConsoleApplication1.Program.Main(String[] args) 位置 D:\web\ConsoleApplication1\ConsoleApplication1\Program.cs:行号 129
       在 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       在 System.Threading.ThreadHelper.ThreadStart()
  InnerException: