使用WhenActivated时遇DisposeWith调用歧义错误求助
解决DisposeWith调用歧义问题
出现这个错误是因为System.Reactive.Disposables和Avalonia.Controls.Mixins两个命名空间下都定义了同名的DisposeWith扩展方法,编译器无法自动判断该调用哪一个,以下是几种解决方法:
显式调用指定命名空间的静态方法
直接放弃扩展方法的语法,明确调用你需要的那个命名空间下的静态方法。比如如果你想使用System.Reactive的版本:this.WhenActivated(disposables => { var subscription = this.WhenAnyValue(x => x.Selected) .WhereNotNull() .ObserveOn(RxApp.MainThreadScheduler) .Do(x => _logger.LogInformation($"selected {x?.Name}")) .Subscribe(x => process(x)); System.Reactive.Disposables.DisposableMixins.DisposeWith(subscription, disposables); });要是想用Avalonia的版本,就把命名空间换成
Avalonia.Controls.Mixins。移除不必要的命名空间引用
检查你的代码文件头部的using语句,如果其中一个命名空间是你项目里用不到的,直接删掉对应的using行。比如如果不需要Avalonia.Controls.Mixins,就移除using Avalonia.Controls.Mixins;,这样编译器就只会找到剩下的那个版本的DisposeWith方法。给命名空间添加别名
如果两个命名空间都必须保留,可以给其中一个起别名,避免冲突。比如先在文件头部添加别名:using RxDisposables = System.Reactive.Disposables;然后在代码里通过别名调用静态方法:
this.WhenActivated(disposables => { var subscription = this.WhenAnyValue(x => x.Selected) .WhereNotNull() .ObserveOn(RxApp.MainThreadScheduler) .Do(x => _logger.LogInformation($"selected {x?.Name}")) .Subscribe(x => process(x)); RxDisposables.DisposableMixins.DisposeWith(subscription, disposables); });
内容的提问来源于stack exchange,提问作者FinalFortune
相关产品推荐
相关产品推荐

