VS Code 指标如何计算
How does VS Code metrics do the math
我一直在四处挖掘,但找不到令我信服的答案。直到最近我还认为代码行数只取决于完整的代码行数,我的意思是,每一行代码都有真正的目的,这或多或少是 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;
}
...其中代码行计数器计数 6 个不同的行。有人能告诉我到底发生了什么吗,IL 是如何解释 linq 查询的,因为它在一行代码中生成了 3 行不同的代码;更重要的是,我该如何解释 linq 的使用打破了每个方法的行数规则?
谢谢
似乎作为使用 IL 来近似代码行的一部分,lambda 表达式被视为单独定义的方法。
您的示例 LINQ 查询有 3 个 lambda 表达式(一个无效 Select
和两个 Where
可以很容易地组合成一个),每个都被编译成一个委托。
代码行数是这样写的:
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; }
应该统计多少行代码?
我一直在四处挖掘,但找不到令我信服的答案。直到最近我还认为代码行数只取决于完整的代码行数,我的意思是,每一行代码都有真正的目的,这或多或少是 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;
}
...其中代码行计数器计数 6 个不同的行。有人能告诉我到底发生了什么吗,IL 是如何解释 linq 查询的,因为它在一行代码中生成了 3 行不同的代码;更重要的是,我该如何解释 linq 的使用打破了每个方法的行数规则? 谢谢
似乎作为使用 IL 来近似代码行的一部分,lambda 表达式被视为单独定义的方法。
您的示例 LINQ 查询有 3 个 lambda 表达式(一个无效 Select
和两个 Where
可以很容易地组合成一个),每个都被编译成一个委托。
代码行数是这样写的:
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; }
应该统计多少行代码?