为何ReSharper自动将对象转为基类?如何关闭该自动补全行为
解决ReSharper自动为基类方法插入强制类型转换的问题
问题场景
编写派生自Observable基类的ViewModel属性时,输入SetProperty(后,ReSharper自动将代码转换为((Observable)this).SetProperty(...),已确认该行为由ReSharper导致(暂停后消失),且基类的SetProperty方法为protected未被重写:
ViewModel属性示例:
public Point ScanPos { get => _scanPos; set => SetProperty(ref _scanPos, value); } private Point _scanPos;
基类Observable的SetProperty实现:
protected bool SetProperty<T>( ref T currentValue, T newValue, [CallerMemberName] string? propertyName = null) { if (Equals(currentValue, newValue)) return false; currentValue = newValue; // ReSharper disable once ExplicitCallerInfoArgument RaisePropertyChanged(propertyName); return true; }
解决方案
无需关闭括号触发的自动补全,只需调整ReSharper的以下设置:
- 打开ReSharper设置(菜单路径:ReSharper → Options;快捷键:Alt+R, O)
- 导航到
Code Editing → C# → Code Completion → Behavior - 找到并取消勾选**"Qualify base members with base type cast"**(部分版本翻译为"使用基类转换限定基成员")
- 若上述选项不存在,可切换到
Code Editing → C# → Code Style → References,将**"Qualify references to base class members"**设置为Do not qualify
修改设置后,重新输入SetProperty(即可正常补全,不会自动插入基类强制转换。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

