无法隐式转换类型“”;字符串“;至“;字符串[]”;
本文关键字:字符串 类型 转换 | 更新日期: 2023-09-27 18:13:05
我正在尝试将带有名称和路径的项目添加到列表框中,我得到了这个eror:
无法将类型
string
隐式转换为string[]
string path = textbox1.Text;
string[] FileName, FilePath;
DirectoryInfo directoryInfo = new DirectoryInfo(path);
FileInfo[] files = directoryInfo.GetFiles();
foreach( FileInfo fileInfo in files)
{
FileName = fileInfo.FullName; // Here
FilePath = fileInfo.Name; // and here
listbox2.Items.Add(fileInfo.FullName);
}
您已经声明了这一点:
string[] FileName, FilePath;
所以分配这个:
FileName = fileInfo.FullName; // Here
FilePath = fileInfo.Name; // and here
正在将字符串(例如fileInfo.FullName是一个字符串(分配给字符串数组。
你想做的是列出这些,所以定义列表并添加值:
string path = textbox1.Text;
var FileNames = new List<string>();
var FilePaths = new List<string>();
DirectoryInfo directoryInfo = new DirectoryInfo(path);
FileInfo[] files = directoryInfo.GetFiles();
foreach( FileInfo fileInfo in files) {
FileNames.Add(fileInfo.FullName); // Here
FilePaths.Add(fileInfo.Name); // and here
listbox2.Items.Add(fileInfo.FullName);
}
您已经将FileName
和FilePath
定义为string[]
。看起来好像您希望它们每个都包含一个字符串值。
string[] FileName, FilePath;
将其更改为string
string FileName, FilePath;
string[] FileName, FilePath;
您将FileName
和FilePath
声明为数组,但FullName
和Name
都返回string
,因此出现错误。
文件系统信息。FullName属性
文件系统信息。名称属性
将您的申报更改为:
string FileName, FilePath;
问题是FileName
和FilePath
被声明为string[]
,但您正试图为它们分配一个string
。但是,由于您说您正在尝试将具有名称和路径的文件列表添加到列表框中,因此根本不需要FileName
或FilePath
变量。更容易的是设置ListBox
的DataSource
,并设置要显示的对象属性:
listbox2.DisplayMember = "Name"; //The Name property from FileInfo
listbox2.DataSource = files;
然后,当需要获取所选项目时,将其转换为FileInfo:
var selectedFileInfo = (FileInfo)listbox2.SelectedItem;
var selectedFileName = selectedFileInfo.Name;
//etc
简单地声明FileNames
和FilePaths
以键入List<string>
并在单个foreach循环中执行Add
可能会更好,但这里有一个linq替代方案。
string[] FileNames, FilePaths;
在两个linq操作中使用匿名函数委托。
FileNames = files.Select( f => f.FullName).ToArray();
FilePaths = files.Select( f => f.Name).ToArray();
listBox2.AddRange(files.Select(FileNames)); //AddRange can take either IEnumerable<T> or T[] as a parameter
如果您先构建表达式,它会变得更清晰(也许会更优化(,因为您没有声明匿名委托函数。
// these can be declared out of function scope as readonly..
Func<FileInfo, string> SelectFullName = (f) => f.FullName;
Func<FileInfo, string> SelectName = (f) => f.Name;
FileNames = files.Select(SelectFullName).ToArray();
FilePaths = files.Select(SelectName).ToArray();
listBox2.AddRange(FileNames);
linq方法的优点是,在添加项
FileNames
和FilePaths
进行枚举