JetBrains Rider 2025.2 Help

代码检查:可能在条件调用中无意的修改

此检查会检测条件语句中的方法调用(例如, Debug.Assert() )可能导致意外的副作用或降低代码清晰度的情况。

当一个方法改变对象的状态并且其返回值在条件语句中被使用时,逻辑可能会让读者感到模糊。 这会降低可维护性,并增加意外错误的可能性。

请查看以下示例:

using System.Collections.Generic; using System.Diagnostics; class Program { void Example() { var set = new HashSet<int>(); Debug.Assert(set.Add(1)); // Inspection warning here _ = set.Count; } }

在此示例中:

  • HashSet.Add 方法通过尝试添加一个值来修改集合,其返回值(bool )指示操作是否成功。

  • 直接在 Debug.Assert 调用中使用此返回值可能会让读者感到困惑,因为如果不了解 HashSet.Add 的细节,断言的意图就不清楚。

  • 在条件语句中修改集合通常不是标准做法,因为这可能导致意外的副作用或对预期逻辑的误解。

为了解决此检查并提高代码清晰度,请考虑以下方法:

  • 为清晰性重构:将方法调用的结果提取到一个命名明确的变量中,以明确其用途:

    bool wasAdded = set.Add(1); Debug.Assert(wasAdded);
  • 审查意图和必要性:如果集合的断言或修改是不必要的或具有误导性,请考虑重构或移除它以简化代码。

通过遵循这些建议,您可以提高代码的可读性,减少歧义,并确保条件语句的意图对维护代码的任何人都清晰明了。

最后修改日期: 2025年 9月 26日