我正在加载文本文件并在列表框中显示文本文件名。当我单击列表框时,我将文件的路径保存到变量。这适用于我的另一个应用程序,但在新的应用程序中,我收到以下错误:
错误8' string.Join的最佳重载方法匹配(字符串, 串[])'有一些无效的参数错误9参数2:不能 转换自' System.Collections.Generic.IEnumerable'至 '串[]'
这是代码:
void reciperefresh()
{
FileListbox.Items.Clear();
string[] files = Directory.GetFiles(@"C:\Recipe", "*.txt",
SearchOption.AllDirectories);
foreach (string f in files)
{
var fileItem = new FileItem { Title1 = Path.GetFileName(f),
Path1 = Path.GetFullPath(f) };
FileListbox.Items.Add(fileItem);
}
}
编辑:我在最后添加了ToArray()并修复了它。谢谢你们。
我还有一个与此相关的错误:
当我在列表框中显示文件路径而不是实际文件名(test.txt)时,文本显示为:" OpenCV.Form1 + FileItem"
以下是代码:
{{1}}
答案 0 :(得分:2)
尝试将selectedItems.Select(x => x.Path1)
替换为selectedItems.Select(x => x.Path1).ToArray()
。您应该传递一个字符串数组而不是IEnumerable<string>
。
答案 1 :(得分:1)
您需要传递一个数组或字符串,而不是您的selectedElements所在的Enumerable。
答案 2 :(得分:1)
Select
会返回IEnumerable
,但该方法需要string[]
。选择后添加ToArray。
var all = string.Join(Environment.NewLine, selectedItems.Select(x => x.Path1).ToArray());
Re:您问题的附加部分(这应该是一个新问题),您需要将其更改为:
FileListbox.Items.Add(fileItem.Title1);
否则它正在使用您未覆盖的Object.ToString()
方法。或者覆盖ToString
类中的FileItem
方法。
答案 3 :(得分:1)
错误是您尝试使用字符串的枚举而不是字符串数组。试试这个:
string.Join(Environment.NewLine, selectedItems.Select(x => x.Path1).ToArray());
答案 4 :(得分:0)
错误是不言自明的。它是说将它转换为字符串数组。