- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想弄清楚这两个规则之间有什么区别?
MergeSequentialChecks
MergeSequentialChecksWhenPossible
文档没有说明第二个。 https://www.jetbrains.com/help/resharper/2016.1/MergeSequentialChecks.html
我不太清楚 WhenPossible
是什么意思?
如果 ReSharper 建议应用第一条规则并合并我的顺序检查,那么它确实是可能的。怎么可能呢?
这是要检查的代码示例。
public class Person
{
public string Name { get; set; }
public IList<Person> Descendants { get; set; }
}
public static class TestReSharper
{
// Here `MergeSequentialChecks` rule is triggered for both `&&` operands.
public static bool MergeSequentialChecks(Person person)
{
return person != null && person.Descendants != null && person.Descendants.FirstOrDefault() != null;
}
// Here `MergeSequentialChecksWhenPossible` rule is triggered.
public static bool MergeSequentialChecksWhenPossible1(Person person)
{
return person != null && person.Descendants.Any();
}
// Here `MergeSequentialChecksWhenPossible` rule is triggered.
public static bool MergeSequentialChecksWhenPossible2(Person person)
{
return person.Descendants != null && person.Descendants.Any();
}
}
最佳答案
带有“(如果可能)”标签的代码检查背后的想法很简单:我们决定不建议使用默认 R# 设置进行可能的代码转换,因为生成的代码可能会导致可读性降低或变得更难理解。关于建议或不建议的决定是通过临时启发式方法完成的。
当我们首次实现与 C# 6.0 相关的代码建议和转换并在我们可用的大型解决方案中审查它们的结果时,我们决定将近 ~2/3 的检查如“合并顺序检查”/“使用空传播”应该不建议进行代码转换。例如,我们认为在这样的代码情况下:
if (node != null && node.IsValid()) { ... }
...使用 ?.
并没有真正的好处运营商和“解除”的介绍operator==(bool, bool)
运算符超过 bool?
的值输入:
if (node?.IsValid() == true) { ... }
此外,不同的开发者对如何检查 bool?
类型的值有不同的看法因为 true
(有些人更喜欢用 ?? false
代替,但这会使生成的代码成为 even?.more ?? questionable
)。
因此,在上述情况下,顺序检查的合并绝对是“可能的”,但我们不会推荐使用默认 R# 设置(正确的默认设置是一项巨大的责任),让用户能够通过启用相同代码检查的“(如果可能)”版本来查看所有情况。据我所知,目前我们只在“合并顺序检查”检查中检查是否不产生提升的 bool 检查,其他检查有更多的启发式,例如:
if (stringBuilder != null) { // "Use null propagation"
stringBuilder.Append("hello");
}
上面的代码值得建议使用条件调用运算符:
stringBuilder?.Append("hello");
虽然按顺序使用条件调用两次或更多次是有问题的...
if (stringBuilder != null) { // no suggestion
stringBuilder.Append("hello");
stringBuilder.Append("world");
stringBuilder.Append("!!!");
}
附注上下文操作“合并顺序检查”/“到空传播”总是在可以进行转换时启用,不管代码检查的状态及其严重性如何。
关于c# - ReSharper `MergeSequentialChecks` 和 `MergeSequentialChecksWhenPossible` 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40135936/
示例:我想要一个插入方法的模板。如果类被声明 sealed ,那么我想要声明的方法private .如果类不是 sealed ,那么我想要声明的方法protected virtual . 另一个例子。
我不记得我购买的是 C# 版本还是 C#+VB 版本,我想知道,因为您在购买升级到 R# 6 时需要了解这一点。 我在任何地方都找不到关于对话框。任何人都可以帮忙吗? 最佳答案 菜单中的“ReShar
任何人都知道我可以在哪里更改设置以阻止 resharper 在调试时将这些消息输出到输出窗口? 'JetBrains.ReSharper.TaskRunner.exe' (Managed): Load
我想将其完全关闭,而不得到任何解决方案范围的提示。我只看到我可以在哪里暂停但找不到关闭它的答案。 最佳答案 在Resharper 5.1中,通过取消选中ReSharper->选项->代码检查->设置下
如何在不卸载的情况下卸载 Resharper?我在一个项目中需要它,但它会干扰另一个项目。 最佳答案 工具 > 选项 > ReSharper > 暂停 关于resharper - 如何在不卸载的情况下
我想告诉 ReSharper 忽略我的项目中的一些文件。其中一些太大了(它们包含固定的测试数据)。他们中的一些人只是混淆了它(混杂了 Silverlight 和 .NET 代码)。 有没有办法通过在文
我希望能够为多个项目禁用 R#。有相当多的内容需要排除,这意味着在 VS 中为每个项目执行此操作并不理想(菜单:R# -> 选项 -> 代码检查 -> 设置 -> 编辑要跳过的项目)。 有人知道有什么
我有一些代码,其中有一系列“绿色”灯泡建议,Resharper 告诉我可以使用对象初始值设定项。 我一直在遗留代码中看到这种事情,其中有一些代码模式一遍又一遍地重复,Resharper 知道如何自
我知道如何导航到文件或类,但是我可以导航到类的方法吗? 哦,假设我正在查看不同类(class)的文件 最佳答案 关于我正确配置的键绑定(bind),之前的所有答案对我来说似乎都已过时/无效。 我说:
Resharper 的安装路径在我们尝试过的多台不同计算机上似乎有所不同。其中一个,默认位置是 C:\Program Files (x86)\JetBrains\Installations 在其他电脑
我刚刚为我的应用程序实现了一个自定义 MessageBox。我现在想用我的自定义实现替换对 MessageBox.Show() 的任何调用,即 MsgBox.Show()**。我意识到我可以通过简单的
我对 Resharper 有疑问 - 它的所有菜单选项都是灰色的,没有快捷方式可用... 我已经尝试使用修复选项运行安装程序 - 没有成功 还尝试卸载/重新安装 - 相同.. :( ReSharper
下周我将在我的同事面前谈论 Resharper 作为提高开发人员性能的工具。由于本次演讲的时间有限,问题是 - 哪些重新锐化功能比其他功能更值得讨论? 目前我能想到的是: 代码分析/突出显示 单元测试
此 question是相似的,但我的问题似乎是在未答复的评论中提出的。 我创建了一个 C# 类。我使用 alt-insert 添加构造函数。我向构造函数添加一个参数,然后使用 alt-enter 从该
我正在使用 this NetResource class将文件发送到网络驱动器,它看起来像这样: [StructLayout(LayoutKind.Sequential)] public class
Resharper 确实提示诸如由 WCF 服务引用之类的东西生成的 reference.cs 之类的文件。如何让 Resharper 完全跳过此类文件? 最佳答案 菜单 ReSharper -> O
我正在使用 Resharper(带有 StyleCop 插件,尽管我认为这与问题/答案无关)在我们的代码库中强制执行命名约定。除了一个异常(exception),这几乎在任何地方都非常有效。 对于测试
我是 ReSharper 的新手。 对于那些使用 Resharper 的人,有没有一种方法可以添加自定义代码分析规则? 例如,我可能有一条规则说所有私有(private)变量都应该以字母“m”开头。我
这段代码: IEnumerable> numbas = new[] {new[] {0, 1}, new[] {2}, new[] {3, 4, 5}}; var flattened = numbas
是否可以更改 Resharper 格式化属性的方式? 我不喜欢: public string Foo { get { return bar; } set
我是一名优秀的程序员,十分优秀!