这个代码片段可以移到其他代码块中吗?

问题描述 投票:0回答:1

给出这段代码:

public WeekendMeetingHistoryItem[] ExtractFutureWeekendMeetingHistoryItems(DateTime datWeekOfMeeting, String strHistoryDatabase)
{
    List<WeekendMeetingHistoryItem> listHistoryItems = new List<WeekendMeetingHistoryItem>();

    try
    {
        // Read the XML file
        XDocument docAssignHistory = XDocument.Load(strHistoryDatabase);

        var listHistory = docAssignHistory.Descendants("PublicTalkInfo")
                            .Where(x => ConvertWeekNameToDate(x.Parent.Name.ToString()) > datWeekOfMeeting);
        foreach (XElement nodeHistoryItem in listHistory)
        {
            DateTime datHistoryItemWeekOfMeeting = ConvertWeekNameToDate(nodeHistoryItem.Parent.Name.ToString());
            WeekendMeetingHistoryItem oItem = new WeekendMeetingHistoryItem
            {
                Week = datHistoryItemWeekOfMeeting,
                Chairman = nodeHistoryItem.Element("PublicTalkChairman")?.Value,
                OpeningPrayer = nodeHistoryItem.Element("PrayerOpen")?.Value,
                ConcludingPrayer = nodeHistoryItem.Element("PrayerClose")?.Value,
                Host = nodeHistoryItem.Element("VideoConferenceHost")?.Value,
                Cohost = nodeHistoryItem.Element("VideoConferenceCohost")?.Value,
                HomeSpeaker = nodeHistoryItem.Element("PublicTalkSpeaker")?.Value,
                Interpreter = nodeHistoryItem.Element("Interpreter")?.Value,
                Hospitality = nodeHistoryItem.Element("PublicTalkHospitality")?.Value,
                AwaySpeaker1 = nodeHistoryItem.Element("AwaySpeaker1")?.Value,
                AwaySpeaker2 = nodeHistoryItem.Element("AwaySpeaker2")?.Value,
                WatchtowerConductor = nodeHistoryItem.Element("WatchtowerConductor")?.Value,
                WatchtowerReader = nodeHistoryItem.Element("WatchtowerReader")?.Value,
                WatchtowerBibleVersesReader = nodeHistoryItem.Element("BibleVersesReader")?.Value,
                Miscellaneous = nodeHistoryItem.Element("Misc")?.Value
            };

            var awayTalks = nodeHistoryItem.Element("AwayTalks");
            if (awayTalks != null)
            {
                var awayTalkList = awayTalks.Descendants("AwayTalk");
                if (awayTalkList != null)
                {
                    foreach (var awayTalkItem in awayTalkList)
                    {
                        AwayTalk item = new AwayTalk
                        {
                            Speaker = awayTalkItem.Element("Speaker").Value,
                            Congregation = awayTalkItem.Element("Congregation").Value,
                            TalkNumber = awayTalkItem.Element("TalkNumber").Value,
                            MeetingDate = DateTime.Parse(awayTalkItem.Element("MeetingDate").Value)
                        };
                        oItem.AwayTalks.Add(item);
                    }
                }
            }

            listHistoryItems.Add(oItem);
        }
    }
    catch (Exception ex)
    {
        SimpleLog.Log(ex);
        return null; 
    }

    return listHistoryItems.ToArray();
}

可以移动这个位吗:

var awayTalks = nodeHistoryItem.Element("AwayTalks");
if (awayTalks != null)
{
    var awayTalkList = awayTalks.Descendants("AwayTalk");
    if (awayTalkList != null)
    {
        foreach (var awayTalkItem in awayTalkList)
        {
            AwayTalk item = new AwayTalk
            {
                Speaker = awayTalkItem.Element("Speaker").Value,
                Congregation = awayTalkItem.Element("Congregation").Value,
                TalkNumber = awayTalkItem.Element("TalkNumber").Value,
                MeetingDate = DateTime.Parse(awayTalkItem.Element("MeetingDate").Value)
            };
            oItem.AwayTalks.Add(item);
        }
    }
}

可以将其向上移动到此代码块中吗:

WeekendMeetingHistoryItem oItem = new WeekendMeetingHistoryItem
{
    // ...
}
c# linq-to-xml
1个回答
0
投票

是的,可以使用 Linq lambda 语法来完成,如下所示:


var oItem = new WeekendMeetingHistoryItem
{
    AwayTalks = nodeHistoryItem.Element("AwayTalks")?.Descendants("AwayTalk")
                .Select(r=>  new AwayTalk {
                  Speaker = r.Element("Speaker").Value,
                  Congregation = r.Element("Congregation").Value,
                  TalkNumber = r.Element("TalkNumber").Value,
                  MeetingDate = DateTime.Parse(awayTalkItem.Element("MeetingDate").Value)
              }).ToList()
}
© www.soinside.com 2019 - 2024. All rights reserved.