当前位置: 首页 > news >正文

如果不用 ReSharper,那么 Visual Studio 2019 能还原 ReSharper 多少功能呢?

本文只谈论 ReSharper 的那些常用功能中,Visual Studio 2019 能还原多少,主要提供给那些正在考虑不使用 ReSharper 插件的 Visual Studio 用户作为参考。毕竟 ReSharper 如此强大的功能是建立在每年缴纳不少的费用以及噩梦般占用 Visual Studio 性能的基础之上的。然而使用 Visual Studio 2019 社区版不搭配 ReSharper 则可以免费为开源社区做贡献。


本文内容

    • 完美还原
      • 无处不在的智能感知提示
      • 在输入时即自动导入需要的命名空间
      • 提取局部变量
      • 重命名标识符(类名/方法名/属性名/变量名等)
    • 可以还原
    • 依然不足
      • 大量的代码片段

本文的内容分为三个部分:

  1. Visual Studio 能完全还原的 ReSharper 的功能
    • 可能 Visual Studio 在此功能上已经追赶上了 ReSharper
    • 可能 Visual Studio 在此功能上虽然依然不如 ReSharper 完善,但缺少的部分几乎不影响体验
    • 可能 Visual Studio 此功能比 ReSharper 更胜一筹
  2. Visual Studio 能部分还原 ReSharper 的功能
    • 可能在多数场景中 Visual Studio 能获得 ReSharper 的此功能效果,在少数场景下不如 ReSharper
    • 可能对多数人来说 Visual Studio 能获得 ReSharper 的此功能效果,对另一部分人来说无法替代 ReSharper
    • 有可能 Visual Studio 在此功能上另辟蹊径比 ReSharper 更厉害,但综合效果不如 ReSharper
    • Visual Studio 此功能依然很弱,但可以通过安装免费的插件的方式补足
  3. Visual Studio 此功能依然比不上 ReSharper
    • 可能是 Visual Studio 没有此功能
    • 可能是 Visual Studio 此功能的实现方式上不如 ReSharper 快速、高效、简单

完美还原

无处不在的智能感知提示

默认情况下,Visual Studio 只在你刚开始打字或者输入 .( 的时候才出现智能感知提示,但是如果你使用 ReSharper 开发,你会发现智能感知提示无处不在(所以那么卡?)。

实际上你也可以配置 Visual Studio 的智能感知在更多的情况下出现,请打开下面“工具”->“选项”->“文本编辑器”->“C#”->“IntelliSense”:

打开更多的智能感知提示时机

打开“键入字符后显示完成列表”和“删除字符后显示完成列表”。这样,你只要正在编辑,都会显示智能感知提示。

另外,如果你当前需要打开智能感知提示,默认情况下使用 Ctrl + 空格键 可以打开。当然你也可以将其修改为 ReSharper 中常见的快捷键 Alt + 右箭头。方法是修改键盘快捷键中的 “” 项。

完成列表

修改快捷键方法详见:

  • 如何快速自定义 Visual Studio 中部分功能的快捷键

另外,在 IntelliCode 部分,可以选择打开更多的 IntelliSense 完成项:

IntelliCode

在输入时即自动导入需要的命名空间

ReSharper 的智能感知提示包含所依赖的各种程序集中的类型,然而 Visual Studio 的智能感知则没有包含那些,只有顶部写了 using 的几个命名空间中的类型。

Visual Studio 2019 中可以设置智能感知提示中“显示未导入命名空间中的项”。默认是没有开启的,当开启后,你将直接能在智能感知提示中看到原本 ReSharper 中才能有的编写任何类型的体验。

智能感知中包含尚未导入的类型

默认情况下输入未知类型时只能完整输入类名然后使用重构快捷键将命名空间导入:

只能通过重构导入命名空间

但开启了此选项后,只需要输入类名的一部分,哪怕此类型还没有写 using 将其导入,也能在智能感知提示中看到并且完成输入。

可以导入命名空间的智能感知提示

提取局部变量

在 ReSharper 中,选中一段代码,如果这段代码可以返回一个值,那么可以使用重构快捷键(默认 Alt+Enter)生成一个局部变量。如果同样带代码块在此方法体中有多处,那么可以同时将多处代码一并提取出来成为一个布局变量。

在 Visual Studio 中,也可以选中一段代码将其提取称一个局部变量:

重命名标识符(类名/方法名/属性名/变量名等)

ReSharper 可以使用 Ctrl + R, R 快捷键重命名一个标识符。

Visual Studio 中也是默认使用 F2 或者与 ReSharper 相同的 Ctrl + R, R 快捷键来重命名一个标识符。

重命名标识符

可以还原

正在填坑……

依然不足

大量的代码片段

ReSharper 中自带了大量方便的代码片段,而且其代码片段的可定制性非常强,有很多可以只能完成的宏;而且还有后置式代码片段。

然而 Visual Studio 自带的代码片段就弱很多,只能支持最基本的宏。

不过可以通过下面一些插件通过数量来补足功能上的一些短板:

  • Snippetica for C# - Visual Studio Marketplace
  • C# Methods Code Snippets - Visual Studio Marketplace

我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • 如何监视 WPF 中的所有窗口,在所有窗口中订阅事件或者附加 UI
  • 如何追踪 WPF 程序中当前获得键盘焦点的元素并显示出来
  • 使用 Visual Studio 编译时,让错误一开始发生时就停止编译(以便及早排查编译错误节省时间)
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • 在项目文件 / MSBuild / NuGet 包中编写扩展编译的时候,正确使用 props 文件和 targets 文件
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • 如何给 Windows Terminal 增加一个新的终端(以 Bash 为例)
  • 在 Visual Studio 中设置当发生某个特定异常或所有异常时中断
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • 如何在 Windows 10 中安装 WSL2 的 Linux 子系统
  • 如何安装和准备 Visual Studio 扩展/插件开发环境
  • 基于 Roslyn 同时为 Visual Studio 插件和 NuGet 包开发 .NET/C# 源代码分析器 Analyzer 和修改器 CodeFixProvider
  • 软件界面中一些易混淆/易用错的界面文案,以及一些约定俗成的文案约定
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Git学习与使用心得(1)—— 初始化
  • HTTP 简介
  • Invalidate和postInvalidate的区别
  • Iterator 和 for...of 循环
  • Java 多线程编程之:notify 和 wait 用法
  • JavaScript-Array类型
  • JavaScript类型识别
  • jQuery(一)
  • Linux后台研发超实用命令总结
  • Meteor的表单提交:Form
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Webpack 4 学习01(基础配置)
  • 代理模式
  • 对超线程几个不同角度的解释
  • 区块链分支循环
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 应用生命周期终极 DevOps 工具包
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 在Mac OS X上安装 Ruby运行环境
  • kubernetes资源对象--ingress
  • 昨天1024程序员节,我故意写了个死循环~
  • ​如何在iOS手机上查看应用日志
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #stm32整理(一)flash读写
  • $.ajax()参数及用法
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (2)Java 简介
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (十八)SpringBoot之发送QQ邮件
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .NET 8.0 中有哪些新的变化?
  • .net 后台导出excel ,word