如何在StringList中获取String? C#

时间:2014-12-11 09:05:56

标签: c# xml string parsing tstringlist

我的Exchange约会存在一个小问题。我们的想法是将会议日历中的会议同步到个人交换日历。

我在CalendarItem类中有这个StringList:

   private StringList m_Category;
   public StringList Category { get { return m_Category; } }

它应该去:

Microsoft.Exchange.WebServices.Data.Appointment xApointment = new Appointment(m_Service)
xApointment.Categories = xItem.Category; //xItem = Instance of CalendarItem

Microsoft.Exchange.WebService.Data.Appointment我有预先确定的StingList Categories

现在发生的事情是我正在解析XML文件,它看起来像:

<listitems  xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" 
    xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" 
    xmlns:rs="urn:schemas-microsoft-com:rowset" 
    xmlns:z="#RowsetSchema" 
    xmlns="http://schemas.microsoft.com/sharepoint/soap/">
    <rs:data ItemCount="1">
    <z:row  ows_ContentTypeId="0x010200C5A7325634A3154BB8249D1C36246E00" 
    ows_Title="Test GetAllViewFields" 
    ows_Location="Testhausen" 
    ows_EventDate="2014-12-15 08:00:00" 
    ows_EndDate="2014-12-15 09:00:00" 
    ows_Description="Ein Test meeting" 
    ows_fAllDayEvent="0" 
    ows_fRecurrence="0" 
    ows_EventType="0" 
    ows_RecurrenceID="2014-12-15 08:00:00" 
    ows_Duration="3600" 
    ows_ParticipantsPicker="" 
    ***ows_Category="Geschäftlich"*** 

而且我将整个XML代码解析为String并检查名称是否存在:

private void initFromXmlAttribute(System.Xml.Linq.XAttribute x)
    {
        string AttributeName = x.Name.LocalName.Replace("ows_", "");
        try
        {
            if
            (AttributeName == "Category")
            {
                m_Category= x.Value; //Error implicite convert not possible StringList to String
                return;
            }

错误是因为m_Category = StringListx.Value = String

有没有人知道如何解决这个小问题?

3 个答案:

答案 0 :(得分:2)

我不熟悉StringList类,但我猜它是一个Collection。 您只需使用其中的字符串初始化一个新的StringList:

m_Category = new StringList() { x.Value };

答案 1 :(得分:1)

假设您询问this class,您会看到its constructor接受IEnumerable<string>,因此您可以写信:

m_Category=new StringList(new[]{x.Value});

StringList实现了IEnumerable,因此您还可以使用集合初始化程序语法:

m_Category=new StringList{x.Value};

这将分两步创建类 - 首先创建一个空对象,然后为初始化程序中的每个项调用Add

答案 2 :(得分:0)

您应该能够创建一个具有所需值的新Stringlist(List(Of String)中的StringList inherits,所以它非常简单:

myStringList = new StringList()
myStringList.add(x.Value)

顺便说一句,因为你有效地设置了你的&#34;类别&#34;你可能想要考虑的财产包括&#34; set&#34;声明到您的属性而不是直接修改您的私有变量。实际上,您可以使用以下命令完全跳过定义私有变量:

public StringList Category { get; set; }

Category = new StringList()

编译器将为您完成剩下的工作。