使用string.Join时出错

时间:2018-04-06 10:34:10

标签: c# string

我正在加载文本文件并在列表框中显示文本文件名。当我单击列表框时,我将文件的路径保存到变量。这适用于我的另一个应用程序,但在新的应用程序中,我收到以下错误:

  

错误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}}

5 个答案:

答案 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)

错误是不言自明的。它是说将它转换为字符串数组。