gpt4 book ai didi

c# - 无法将类型为 'System.String' 的对象转换为类型 'FileItem'

转载 作者:太空宇宙 更新时间:2023-11-03 20:56:48 25 4
gpt4 key购买 nike

我已经使用列表框中的路径加载了一个文本文件,但是当我单击列表框项时,出现以下错误:

Unable to cast object of type 'System.String' to type 'FileItem'.

我的代码:

public class FileItem
{
public string Title { get; set; }
public string Path { get; set; }
}

bool modelnameonly;

void reciperefresh()
{
FileListbox.Items.Clear();

string[] files = Directory.GetFiles(@"C:\Recipe", "*.txt", SearchOption.AllDirectories);

foreach (string f in files)
{
var fileItem = new FileItem
{
Title = Path.GetFileName(f),
Path = Path.GetFullPath(f)
};
FileListbox.Items.Add(fileItem.Title);
}
}

string Fileloadpath;

private void FileListbox_SelectedIndexChanged(object sender, EventArgs e)
{
var selectedItems = FileListbox.SelectedItems.Cast<FileItem>();
var all = string.Join(Environment.NewLine, selectedItems.Select(x => x.Path).ToArray());
FileLoadpath = all;
}

如果我从 FileListbox.Items.Add(fileItem.Title); 中删除 Title,错误就会消失,但 ListBox 中显示的文本是 OpenCV .Form1+fileitem 而不是实际的文件名。

最佳答案

首先,我们将解决列表框中名称的问题。默认情况下,当您调用 .ToString() 时,C# 中的对象返回它们的类型名称(这是列表框获取显示值所做的)。您可以通过覆盖 FileItem 类的 ToString() 方法来解决此显示问题:

public class FileItem
{
public string Title { get; set; }
public string Path { get; set; }

public override string ToString()
{
return this.Title;
}
}

或者,正如 M Bakardzhiev 在评论中提到的,您可以简单地将 FileListbox 的 DisplayMember 属性设置为“Title”。


现在您可以简单地将 fileItem 添加到列表框:

FileListbox.Items.Add(fileItem);

现在,您的代码应该可以工作了:

string Fileloadpath;
private void FileListbox_SelectedIndexChanged(object sender,
EventArgs e)
{
var selectedItems = FileListbox.SelectedItems.Cast<FileItem>();
var all = string.Join(Environment.NewLine, selectedItems.Select(x
=> x.Path).ToArray());
FileLoadpath = all;

}

关于c# - 无法将类型为 'System.String' 的对象转换为类型 'FileItem',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49692559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com