此问题的目标是找到获取ObservableCollection
(具体)strings
的具体内容的方法,并将其写入文本文件。
此集合是使用节点构建的,因为它用于实现TreeView
。话虽如此,我正在尝试获取父节点的子值,如下所示:
//I am currently getting an InvalidOperationException -- Sequence contains no matching element
var Node = Collection.GetAllChildren(x => x.Children).Distinct().ToList().First(x => x.DisplayName == Name);
为了写入文件,我使用的是File.
方法:File.WriteAllLines()
。我的理解是,此方法采用FileName,然后采用IEnumerable
(a List
等)。 ObservableCollection
是否包含IEnumberable
兼容的方法,还是需要将内容添加到List
?
现在我正在尝试写入文件行:
File.WriteAllLines(FileName, new ObservableCollection<string> { ViewModel.Data.ToList() });
如何纠正我的代码中的这两个有害部分?获取所需信息,然后将其添加到文件的正确方法是什么?
更新:这些是我在上面的代码行中收到的当前错误。如果我正确地实现这个(我是基于答案),为什么我收到这些编译错误? (注意:type
已切换为string
)
更新2:我已更新要写入文件的参数。 Data
是ObservableCollection<ViewModel>
。
答案 0 :(得分:2)
是的,File.WriteAllLines
的重载需要IEnumerable<string>
。 ObservableCollection<string>
实现IEnumerable<string>
,因此事情应该有效。
仅Type
应为string
:
File.WriteAllLines(FileName, new ObservableCollection<Type> ( NodeName.ToList() ));
ObservableCollection是否包含IEnumberable方法 兼容
不,它实现 IEnumerable。
P.S。正如在另一个答案中建议的那样,ObservableCollection
是多余的。您可以传递任何实现IEnumerable<string>
的内容。
答案 1 :(得分:0)
如果查看System.IO.File.WriteAllLines()的签名,它接受一个字符串数组或一个IEnumerable字符串;
试试这个:
File.WriteAllLines(FileName, NodeName.ToList());