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

本文关键字:创建 结构 变量 动态 何使用 | 更新日期: 2023-09-27 18:35:07

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

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

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

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

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
    }
}

您不需要带有动态 [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;
}