gpt4 book ai didi

c# - Linq 中的 WhereSelectArrayIterator 是什么?

转载 作者:行者123 更新时间:2023-11-30 22:11:07 25 4
gpt4 key购买 nike

我有一个字符串数组。我正在尝试将它们写入一个元素。当我创建一个新元素时,它按预期工作,当我尝试 SetElementValue 时,它​​却没有。任何帮助,将不胜感激。我什至不知道要查找什么。

正常工作:

new XElement("tags", blog.tags.Select(x =>
new XElement("tag", PageUtilities.AddCDATAElements(PageUtilities.SanitizeXmlString(x)))))

Xml 文件中的结果:

<tags>
<tag>&lt;![CDATA[tag1]]&gt;</tag>
<tag>&lt;![CDATA[tag2]]&gt;</tag>
<tag>&lt;![CDATA[tag3]]&gt;</tag>
<tag>&lt;![CDATA[tag4]]&gt;</tag>
</tags>

当我尝试更新时出现问题:

不工作:

xBlog.SetElementValue("tags", blog.tags.Select(x =>
new XElement("tag", PageUtilities.AddCDATAElements(PageUtilities.SanitizeXmlString(x)))));

结果:

<tags>System.Linq.Enumerable+WhereSelectArrayIterator`2[System.String,System.String]</tags>

完全失去了。请帮忙。谢谢你们!

为了简单起见,我在没有 AddCDATEAlements 和 SanitizeXMLString 的情况下进行了尝试,结果仍然完全相同

xBlog.SetElementValue("tags", blog.tags.Select(x => new XElement("tag", x)));

System.Linq.Enumerable+WhereSelectArrayIterator`2[System.String,System.String]

最佳答案

在第一种情况下,您传递的是 IEnumerable进入构造函数,代码足够聪明,可以弄清楚你在做什么并循环执行它。我看了一下构造函数(使用 ReSharper),似乎如果你传递的是一个 IEnumerable,它会循环并创建一个 XNode。对于列表中的每个项目。

在第二种情况下,您将 IEnumerable 传递给 SetElementValue .但它不会检查参数是否为 IEnumerable。它会做一些基本的类型检查,看它是不是字符串、整数等,最后它只调用 ToString。 ,在您的例子中返回由 blog.tags.Select(x => ...) 生成的变量类型的名称.

首先将结果存储在列表中,然后循环应该可以解决问题,但是我不确定您要对列表中的每个项目执行什么操作。

var elements = blog.tags.Select(x =>
new XElement("tag", PageUtilities.AddCDATAElements(PageUtilities.SanitizeXmlString(x))))

foreach (var element in elements)
{
// do something with each element
}

关于c# - Linq 中的 WhereSelectArrayIterator 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20437664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com