【问题标题】:foreach isn't reading well through .descendants and goes to else statement before ifforeach 没有很好地阅读 .descendants 并在 if 之前转到 else 语句
【发布时间】:2021-03-26 02:34:24
【问题描述】:

我仍在学习 C#

我目前正在开发一个过滤器系统,并且有一个 if 语句列表可以阻止用户执行任何操作。现在是不是每当用户提交 ID 时,我的 foreach 都应该遍历已提交 ID 的列表,检查它们是否已经存在。

错误是当用户提交一个已经存在的 ID 时,它在第一次运行时不会看到现有 ID,因此它会创建并填写一个节点,但在第二次运行时它会发送错误消息& 中断会话。

我的代码:

private async void btnAddId_Click(object sender, RoutedEventArgs e)
        {
            XmlDocument Xdoc = new XmlDocument();
            Xdoc.Load(xmldoc);
            XmlNode NodeEl = Xdoc.SelectSingleNode("root/filter/filter_item");
            XmlNode NodeList = Xdoc.SelectSingleNode("root/filter");

            var root = XDocument.Load(xmldoc).Root;
            var filter = root.Element("filter");
            int parsedValue;

            foreach (var f in filter.Descendants())
            {
                if (f.Value == tbAddId.Text)
                {
                    MessageBox.Show("Value already exists in the orderlist!");
                }
                else if (!int.TryParse(tbAddId.Text, out parsedValue))
                {
                    MessageBox.Show("Input isn't numeric!");
                }
                else if (tbAddId.Text == "")
                {
                    MessageBox.Show("No value was given!");
                }
                else if (tbAddId.Text == "Add ID")
                {
                    MessageBox.Show("No value was given!");
                }
                else if (NodeList.InnerText == "")
                {
                    NodeEl.InnerText = tbAddId.Text;
                    tbAddId.Text = "Add ID";
                    tbAddId.Foreground = Brushes.Gray;
                    await api.config_Load();
                    await api.Page_Load();
                }
                else
                {
                    XmlNode filterItem = Xdoc.CreateElement("filter_item");
                    NodeList.AppendChild(filterItem);
                    filterItem.InnerText = tbAddId.Text;
                }

                tbOrderDisplay.Text += f.Value + " ";
            }         

            Xdoc.Save(xmldoc);
        }

XML 内容

<?xml version="1.0"?>
<root>
  <bol_client_id></bol_client_id>
  <!--- this is the client id-->
  <bol_client_secret></bol_client_secret>
  <!-- this is the client secret -->
  <customer_id></customer_id>
  <company_phone></company_phone>
  <auth_token_url></auth_token_url>
  <bol_orders_url></bol_orders_url>
  <debug_mode>true</debug_mode>
  <filter>
    <filter_item>1172828940</filter_item>
    <filter_item>1173700637</filter_item>
  </filter>
</root>

【问题讨论】:

  • Ofc,我会在里面编辑它

标签: c# xml wpf


【解决方案1】:

在尝试插入之前检查值是否存在:

private async void btnAddId_Click(object sender, RoutedEventArgs e)
{
    XmlDocument Xdoc = new XmlDocument();
    Xdoc.Load(xmldoc);
    XmlNode NodeEl = Xdoc.SelectSingleNode("root/filter/filter_item");
    XmlNode NodeList = Xdoc.SelectSingleNode("root/filter");

    var root = XDocument.Load(xmldoc).Root;
    var filter = root.Element("filter");
    int parsedValue;

    //1. Check for duplicates
    foreach (var f in filter.Descendants())
    {
        if (f.Value == tbAddId.Text)
        {
            MessageBox.Show("Value already exists in the orderlist!");
            tbOrderDisplay.Text += f.Value + " ";
            return;
        }
    }

    //2. Validate and insert
    if (!int.TryParse(tbAddId.Text, out parsedValue))
    {
        MessageBox.Show("Input isn't numeric!");
    }
    else if (tbAddId.Text == "")
    {
        MessageBox.Show("No value was given!");
    }
    else if (tbAddId.Text == "Add ID")
    {
        MessageBox.Show("No value was given!");
    }
    else if (NodeList.InnerText == "")
    {
        NodeEl.InnerText = tbAddId.Text;
        tbAddId.Text = "Add ID";
        tbAddId.Foreground = Brushes.Gray;
        await api.config_Load();
        await api.Page_Load();
    }
    else
    {
        XmlNode filterItem = Xdoc.CreateElement("filter_item");
        NodeList.AppendChild(filterItem);
        filterItem.InnerText = tbAddId.Text;
    }

    Xdoc.Save(xmldoc);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-30
    • 2019-04-09
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多