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

从VB.NET转C#:RelayCommand初始化遇CS0236错误求助

问题原因

C#的字段初始化器会在类的实例构造函数之前执行,此时类的实例还未完全创建,因此无法引用非静态的实例成员(比如你的Apply()方法),这就是编译器抛出CS0236错误的核心原因。另外VB.NET的字段初始化逻辑和C#存在差异,VB允许在字段初始化时引用实例成员,这也是你转用C#后遇到语法差异的关键。

解决方案1:在构造函数中初始化命令

把命令的初始化逻辑移到类的构造函数中,此时实例已经创建完成,可以正常访问实例方法:

public RelayCommand ApplyCommand { get; }

// 替换成你的ViewModel类名
public YourViewModel()
{
    ApplyCommand = new RelayCommand(o => Apply());
}

protected virtual void Apply() 
{
    // apply something
}

解决方案2:使用方法组简化写法(可选)

如果RelayCommand的构造函数兼容无参方法的委托转换,也可以用方法组简化代码(同样要放在构造函数里):

public RelayCommand ApplyCommand { get; }

public YourViewModel()
{
    // 忽略传入的object参数
    ApplyCommand = new RelayCommand(_ => Apply());
    // 若RelayCommand有适配无参Action的重载,也可直接写:
    // ApplyCommand = new RelayCommand((Action)Apply);
}

protected virtual void Apply() 
{
    // apply something
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:52:01