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

UWP中使用C#开发时如何从FolderInformation获取StorageFolder?

问题原因

C# 与 C++/WinRT 的类型转换逻辑存在本质差异:

  • C++/WinRT 的 try_as<T> 是底层 COM 接口查询逻辑,只要对象实现了目标类型对应的 COM 接口即可转换成功,不限制托管层的类继承关系
  • C# 的 as 关键字做类类型转换时,要求实例的实际类型必须是目标类或其派生类。你通过 GetVirtualizedFoldersVector 拿到的对象实际类型是 Windows.Storage.BulkAccess.FolderInformation,它和 StorageFolder 是两个平级的 WinRT 运行时类,仅共同实现了 IStorageFolder 接口,不存在继承关系,因此直接类转换必然返回 null。
解决方法

不需要调用路径相关的获取接口,直接通过内置扩展方法转换即可,完全兼容 KnownFolders.MediaServerDevices 这类无路径的虚拟化位置:

using Windows.Storage;
using Windows.Storage.BulkAccess;

private void FolderListView_ItemClick(object sender, ItemClickEventArgs args)
{
    var clickedItem = args.ClickedItem;
    if (clickedItem != null)
    {
        if (clickedItem is FolderInformation folderInfo)
        {
            // 调用IStorageItem扩展方法直接转换为StorageFolder实例
            StorageFolder folder = folderInfo.AsStorageFolder();
            // 后续可正常使用folder对象
        }
    }
}

如果你不需要强类型的 StorageFolder 实例,只是要调用文件夹的常规操作方法,也可以直接转换为 IStorageFolder 接口使用,效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:36:02