如何将变量转换为字符串数组?

6

我已经用C#编写了一个LINQ查询

string etXML = File.ReadAllText("ET_Volume.xml");
string[] allLinesInAFile = etXML.Split('\n');

var possibleElements = from line in allLinesInAFile
                       where !this.IsNode(line)
                       select new { Node = line.Trim() };  

string[] xmlLines = possibleElements.ToArray<string>();

问题出现在最后一行,出现了以下错误:
  • System.Collections.Generic.IEnumerable<AnonymousType#1>不包含定义为ToArray的内容,而最佳扩展方法重载System.Linq.Enumerable.ToArray<TSource>(System.Collections.Generic.IEnumerable<TSource>)有一些无效的参数。
  • 实例参数: 无法将System.Collections.Generic.IEnumerable<AnonymousType#1>转换为System.Collections.Generic.IEnumerable<string>
哪里有问题?如何将我的var转换为string[]

3
无法“从var进行转换”,因为var不是一种类型。var是一个关键字,告诉编译器从右侧的表达式推断静态类型。(您可能已经知道这一点,但我想指出您所提问的措辞不准确。) - stakx - no longer contributing
1个回答

12

你在这里创建了一个匿名类型:

new { Node = line.Trim() }

那没必要,只需返回

line.Trim()

假设您有一个IEnumerable类型的string集合,那么您的ToArray方法将会生效:

var possibleElements = from line in allLinesInAFile
                       where !this.IsNode(line)
                       select line.Trim();  

string[] xmlLines = possibleElements.ToArray();

另一个选项是:

possibleElements.Select(x => x.Node).ToArray();

3
如果您想深入了解LINQ的内部工作原理(并且有足够的时间),您应该查看Jon Skeet的优秀的Edulinq系列 - Bill Tür stands with Ukraine
1
差点又添加了一个答案,但是看到你使用 Select 的选项后,我决定不再重复建议了。 - CoderDennis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接