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

如何将SharePoint的文件和文件夹存入通用List并访问FieldValues属性

解决方案

报错的核心原因有两个:

  1. 你使用List<object>存储元素时,编译器默认将遍历的item识别为object类型,而object本身没有定义ListItemAllFields属性,无法直接访问
  2. 代码存在拼写错误:FiledValues应为FieldValues,拼写错误也会触发属性不存在的报错

你可以根据自己的项目场景选择以下任意一种方案解决:


方案1:遍历中做类型判断与转换(最稳妥,无额外改造)

使用C#模式匹配语法,在遍历时判断元素真实类型后转换,无需修改原有列表定义:

foreach(var item in filesAndFolders)
{
    if (item is File file)
    {
        var fieldValues = file.ListItemAllFields.FieldValues;
        // 处理文件字段值逻辑
    }
    else if (item is Folder folder)
    {
        var fieldValues = folder.ListItemAllFields.FieldValues;
        // 处理文件夹字段值逻辑
    }
}

方案2:使用dynamic类型简化代码(语法简洁但类型不安全)

如果能100%确定列表中仅会存入File和Folder两类对象,可以用dynamic绕过编译期类型检查,运行时自动解析属性:

// 方案A:修改列表初始化定义
List<dynamic> filesAndFolders = new List<dynamic>();

// 方案B:遍历时将item转为dynamic
foreach(dynamic item in filesAndFolders)
{
    var fieldValues = item.ListItemAllFields.FieldValues;
    // 直接处理字段值即可
}

注意:如果列表中混入其他类型对象,运行时会抛出属性找不到的异常。


方案3:封装统一实体类(可维护性最高,适合复杂项目)

如果后续需要处理更多文件/文件夹的公共属性,可以自定义包装类统一封装逻辑,避免重复的类型判断:

// 自定义统一存储实体
public class SharePointItem
{
    public Dictionary<string, object> FieldValues { get; set; }
    // 可扩展其他公共属性:名称、路径、创建时间等
}

// 存入列表时统一转换为包装类
List<SharePointItem> filesAndFolders = new List<SharePointItem>();
// 存入文件示例
filesAndFolders.Add(new SharePointItem
{
    FieldValues = targetFile.ListItemAllFields.FieldValues
});
// 存入文件夹示例
filesAndFolders.Add(new SharePointItem
{
    FieldValues = targetFolder.ListItemAllFields.FieldValues
});

// 遍历时直接访问属性
foreach(var item in filesAndFolders)
{
    var fieldValues = item.FieldValues;
}

额外注意:使用SharePoint CSOM获取File/Folder对象时,需要显式加载ListItemAllFields属性才能正常访问,否则即使类型正确也会抛出属性未初始化的异常,加载示例:

ctx.Load(targetFile, f => f.ListItemAllFields);
ctx.Load(targetFolder, f => f.ListItemAllFields);
ctx.ExecuteQuery();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:06:03