如何使用动态变量创建结构
本文关键字:创建 结构 变量 动态 何使用 | 更新日期: 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;
}