如何用动态变量创建结构?

时间:2014-12-24 09:07:24

标签: c# collections struct

[Serializable]
public struct Item
{
    public DateTime date;
    public string title;
    public string description;
}

Rss link
这是我现有的结构。我创建了一个这个结构的集合,它从rss XML中读取数据(如上所述)。集合具有根据标签名称的值 表示RSS项目标签具有日期,标题,描述和作者等。每个项目对象具有项目标签的项目(日期)值(日期)值。但是在提到的rss中没有日期标记,所以我的日期值得到空白值这是好的。但在我们的应用程序中,用户设置哪个标签应该使用它可能是一个自定义标签。现在我想创建一个结构,其变量将创建于运行时使用字符串数据类型。

2 个答案:

答案 0 :(得分:1)

通过使用以下代码,我解决了我的问题。

public class DynamicDictionary
{
    private IDictionary<string, string> dictionaryKeyValuePair;

    public DynamicDictionary()
    {
        dictionaryKeyValuePair = new Dictionary<string, string>();
    }
    public void AddKeyValuePair(string key, string value)
    {
        dictionaryKeyValuePair.Add(key, value);
    }
    public string GetValueByKeyName(string Key)
    {
        string value = "";
        foreach (var keyValuePair in dictionaryKeyValuePair)
        {
            if (keyValuePair.Key.Equals(Key, StringComparison.CurrentCultureIgnoreCase))
            {
                return keyValuePair.Value;
            }
        }
        return value;
    }
}

将值分配给列表

private Collection<string> tickerAtributesList=new Collection<string>();
tickerAtributesList.add("date");
tickerAtributesList.add("title");
tickerAtributesList.add("description");

XmlNodeList nodes = xmlDoc.SelectNodes("rss/channel/item");
keyValuePair = new Collection<DynamicDictionary>();
        foreach (XmlNode node in nodes)
        {
            DynamicDictionary tempDynamicDictionary = new DynamicDictionary();
            foreach (string tickerAtribute in tickerAtributesList)
            {
                tempDynamicDictionary.AddKeyValuePair(tickerAtribute, ParseDocElements(node, tickerAtribute));
            }
            keyValuePair.Add(tempDynamicDictionary);
        }

以下是如何使用

foreach (var item in keyValuePair)
{
    foreach (string tickerAtribute in tickerAtributesList)
    {
        string tempAtributeVal = item.GetValueByKeyName(tickerAtribute);
        //my code
    }
}

答案 1 :(得分:0)

您不需要具有动态[string]变量的新运行时结构,因为XML已经是您需要的结构。

string rssXml = "<xml>...</xml>";
XDocument doc = XDocument.Parse(rssXml);
string date = doc.Root.Element("date");
string title = doc.Root.Element("title");
string dynamicVar = doc.Root.Element("dynamicVar");

即使您实施动态对象构建,您的业务逻辑也不会改变任何内容。

修改

<xml>
    <books>
        <book id="1">FirstBook</book>
        <book id="2">SecondBook</book>
    </books>
</xml>

XDocument doc = XDocument.Parse(xml);
foreach(XElement el in doc.Root.Element("books").Elements("book"))
{
    string bookId = el.Attribute("id").Value;
    string bookName = el.Value;
}