【问题标题】:linq to xml check whether the key exists?linq to xml 检查密钥是否存在?
【发布时间】:2012-02-15 03:56:44
【问题描述】:

处理从customers.xml 文件中读取一些值到UI 的应用程序。

Linq to xml 代码:

var Settings = (from e in customer.Descendants("appSettings")
                                   from kvpair in e.Elements("Name")
                                   select new
                                   {
                                       Name = kvpair.Attribute("Zip").Value,
                                       Node = kvpair
                                   }).ToDictionary(x => x.Name, y => y);

txtFName.Text==Settings["CustomerA"].Node.attribute("value").Value;
txtLName=Settings["CustomerB"].Node.attribute("value").Value;

我可以通过上面的代码将值从 XMl 文件中获取到 GUI 中。

我的问题是,当我从特定客户的 xml 文件中注释掉任何元素或数据时,我收到错误“字典中不存在给定键”

如果只读取该值或获取下一个值,我如何动态检查字典中是否存在键?

【问题讨论】:

    标签: c# linq-to-xml


    【解决方案1】:

    您正在寻找ContainsKey()TryGetValue() 方法。

    【讨论】:

      【解决方案2】:

      检查字典中是否存在键的“正确”方法是使用 ContainsKey 函数。 dictionary.ContainsKey(keyValue);

      但是,您可能想问自己为什么钥匙不在那里以及它是否应该在那里。

      【讨论】:

      • 我想知道这对于两个或三个值是否足够好,如果我想在 GUI 中显示更多键怎么办?有没有办法我可以遍历字典并找出哪些存在哪些不存在?
      • 是的,您可以通过循环遍历要检查的键值列表来执行此操作,并检查每个键值的 ContainsKey 的返回值。您还可以通过使用 'dictionary.Keys' 获取字典中所有键的列表并通过循环获取字典中键的实际值。
      【解决方案3】:
      if (Settings.ContainsKey("CustomerA"))
      {
         txtLName.Text = Settings["CustomerA"].Node.attribute("value").Value;
      }
      

      编辑:

      您可以循环访问 Keys 属性集合的键:

      foreach (var key in Settings.Keys)
      {
         // ..
      }
      

      您还可以使用 LINQ 过滤出您需要的内容:

      IList<string> filteredKeys = new List<string> { "A", "B" };
      Settings.Where(kv => filteredKeys.Contains(kv.Key));
      

      【讨论】:

      • 这个也可以:txtLName.Text = Settings.ContainsKey("CustomerA") ? Settings["CustomerA"].Node.attribute("value").Value:Null;
      • 我想知道这对于两个或三个值是否足够好,如果我想在 GUI 中显示更多键怎么办???
      • @Macnique :对,但我更喜欢更简洁的代码(在我个人看来)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-07
      • 2014-09-14
      相关资源
      最近更新 更多