从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
相关产品推荐
相关产品推荐

