You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenFileDialog多选文件路径重复添加至List<>问题求助

问题原因

你循环里犯了个低级错误:MyDialog.FileName只会返回第一个选中文件的路径,不管选了多少个,每次循环都拿这个值,自然列表里全是第一个文件的重复项。而你遍历的MyDialog.FileNames才是所有选中文件的路径数组,循环变量file就是当前文件的完整路径,应该用它来代替MyDialog.FileName。

另外,原代码里把BitmapImage转成字符串存到列表里完全没必要——BitmapImage.ToString()返回的不是文件路径,而是类似System.Windows.Media.Imaging.BitmapImage这样的类型信息,根本不是你要的内容。

修正方案

分两种情况处理:

情况1:只想保存文件路径到List<string>

直接把循环变量file添加到列表即可(顺便给你的Filter补了个点:*jpg改成*.jpg,不然匹配不到带后缀的文件):

OpenFileDialog MyDialog = new OpenFileDialog();
MyDialog.Filter = "Picture (.jpg)|*.jpg|Picture (.jpeg)|*.jpeg|Picture (.png)|*.png";
MyDialog.Multiselect = true;
if (MyDialog.ShowDialog() == true)
{
    foreach (string file in MyDialog.FileNames)
    {
        FileListe.Add(file); // 直接添加文件路径
    }
}

情况2:要保存BitmapImage对象到List<BitmapImage>

把列表类型改成List<BitmapImage>,然后直接添加创建好的对象:

List<BitmapImage> FileListe = new List<BitmapImage>(); // 声明正确类型的列表
OpenFileDialog MyDialog = new OpenFileDialog();
MyDialog.Filter = "Picture (.jpg)|*.jpg|Picture (.jpeg)|*.jpeg|Picture (.png)|*.png";
MyDialog.Multiselect = true;
if (MyDialog.ShowDialog() == true)
{
    foreach (string file in MyDialog.FileNames)
    {
        FileListe.Add(new BitmapImage(new Uri(file))); // 添加BitmapImage对象
    }
}

内容的提问来源于stack exchange,提问作者fblechinger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 23:15:47