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

C#报错:字段初始化器无法引用非静态成员(构造函数已初始化)

报错原因

C# 实例字段初始化器的执行顺序先于构造函数内的逻辑。你在类层级直接声明cloud、apiKey、apiSecret、_cloudinary并赋值时,构造函数中给_cloudinaryConfig的赋值操作还未执行,此时_cloudinaryConfig是尚未赋值的非静态实例字段,无法被字段初始化逻辑引用,因此触发该编译错误。
另外你的原代码存在冗余写法问题:创建Cloudinary实例时嵌套了两层new Cloudinary(),Cloudinary构造函数本身支持直接传入Account类型参数,外层嵌套属于无效代码。

修复方案

将所有依赖_cloudinaryConfig的初始化逻辑,全部移动到构造函数内部,放在_cloudinaryConfig赋值语句之后执行即可,修正后的完整代码如下:

private IAppRepository _appRepository;
private IMapper _mapper;
private IOptions<CloudinarySettings> _cloudinaryConfig;
private readonly Cloudinary _cloudinary;

public PhotosController(
    IAppRepository appRepository,
    IMapper mapper,
    IOptions<CloudinarySettings> cloudinaryConfig)
{
    _appRepository = appRepository;
    _mapper = mapper;
    _cloudinaryConfig = cloudinaryConfig;

    // 读取配置
    string cloud = _cloudinaryConfig.Value.CloudName;
    string apiKey = _cloudinaryConfig.Value.ApiKey;
    string apiSecret = _cloudinaryConfig.Value.ApiSecret;

    // 初始化Cloudinary实例,移除冗余嵌套
    _cloudinary = new Cloudinary(new Account(cloud, apiKey, apiSecret));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:18:28