【问题标题】:FirstOrDefault not taking argumentFirstOrDefault 不接受参数
【发布时间】:2025-12-27 21:50:12
【问题描述】:

我将读取条形码放在单独的方法中,该方法读取条形码并将其放入名为条形码的文本框中。并创建了一个按钮来加载与该条形码对应的数据,但面临问题

private void Load_Click(object sender, RoutedEventArgs e) 
{
    var str = @"<Books xmlns=""""> <book Barcode=""780672318863""><Serial>11</Serial> 
                           <name>abc</name> <detail>Fantasy</detail></book>
                           <book Barcode=""780672318864""><Serial>12</Serial>
                           <name>abc</name><detail>Fantasy1</detail></book></Books>";
    var strBarcode = barcode.Text;
    MessageBox.Show(strBarCode);
    XDocument docX = XDocument.Parse(str);
    var s = docX.Descendants("book").FirstOrDefault(a => a.Attribute("Barcode").Value == strBarcode);
    spnl.DataContext = s; 
}

现在消息框说 strBarCode 具有正确的值,但它没有显示在程序中,并且 s 值出来为空 另一方面,如果我直接用“780672318863”代替strBarcode,它会正确显示值
谁能告诉我哪里出错了?

【问题讨论】:

  • 您的 XML 不包含名为“lense”的 any 元素,因此目前这段代码无法正常工作。如果您可以发布一个简短但完整的示例(理想情况下作为控制台应用程序)来演示问题,那将非常有帮助。
  • @JonSkeet - 但它确实有一个 &lt;book Barcode=".."&gt; 。 OP 对域详细信息进行了不完整的混淆。
  • @HenkHolterman:是的,但天知道同时还有什么变化。或者这不是混淆——也许他的代码实际上是错误的,当他对条形码进行硬编码时,他做了一些其他的改变。无法确定 - 但我们可以知道编写的代码永远不会找到lense 元素。这就是演示问题的简短而完整的程序如此重要的地方。

标签: c# wpf xml linq


【解决方案1】:

不可重现。

我使用docX.Descendants("book")... 运行了您的代码,它生成了正确的元素。

你可以试试

  string  strBarcode = barcode.Text.Trim();

但对于其余部分,您只需在调试器中查看。

【讨论】:

  • 我是 WPF 新手,但你能告诉我 Trim 是做什么的
  • Trim() 与 WPF 无关。这是一个简单的字符串方法,可以删除前导和尾随空格(空格)。