c# - VS Code 指标如何计算

标签 c# visual-studio linq cil code-metrics

我一直在四处挖掘,但找不到让我信服的答案。直到最近我才认为代码行数只取决于完整的代码行数,我的意思是,每一行代码都或多或少有实际用途 MSDN表示计数基于 IL 代码;但后来我遇到了这样的情况......

public static System.Collections.Generic.IEnumerable<string> Test(System.Collections.Generic.IList<string> values)
{
    var listX = values.Where(x => !string.IsNullOrEmpty(x)).Select(y => y).Where(w => w.StartsWith("x"));
    return listX;
}

Code Metrics Result

...其中代码行计数器计数 6 个不同的行。有人能告诉我到底发生了什么吗,IL 是如何解释 linq 查询的,因为它在一行代码中生成了 3 行不同的代码;更重要的是,我该如何解释 linq 的使用打破了每个方法的行数规则? 谢谢

最佳答案

似乎作为使用 IL 来近似代码行的一部分,lambda 表达式被视为单独定义的方法。

您的示例 LINQ 查询有 3 个 lambda 表达式(一个无效 Select 和两个可以轻松组合成一个的 Where),每个都被编译成一个委托(delegate).

代码行数是这样写的:

static bool NotNullOrEmpty(string s) => !String.IsNullOrEmpty(s);
static string SelectSelf(string s) => s;
static bool StartsWithX(string s) => s.StartsWith("x");

public static System.Collections.Generic.IEnumerable<string> Test(System.Collections.Generic.IList<string> values)
{
    var listX = values.Where(NotNullOrEmpty).Select(SelectSelf).Where(StartsWithX);
    return listX;
}

考虑

public static System.Collections.Generic.IEnumerable<string> Test(System.Collections.Generic.IList<string> values) {
    var listX = values.Where(x => { return !string.IsNullOrEmpty(x); }).Select(y => { return y; }).Where(w => { var xs = "x"; return w.StartsWith(xs); }); return listX; }

应该统计多少行代码?

关于c# - VS Code 指标如何计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50399231/

相关文章:

c# - 使用 linq 的 WPF 组合框绑定(bind)

c# - 解释这些 Linq 代码

c# - 选择投影中的索引

c# - 如何在与文本框控件无关的情况下将 ENTER 链接/设置为 winforms 中的函数?

c# - Visual Studio 不再显示 IntelliSense 描述

c# - 发现环境颜色背后的真实颜色

c# - 托管 WiFi 错误

c# - 在 C# 中,finally block 之前有一个 catch-all catch block 有什么用?

visual-studio - 无需 NuGet 即可恢复 NuGet 包恢复同意

c# - 如何根据对象属性的总和获取 List<T> 项的子集