我一直在四处挖掘,但找不到让我信服的答案。直到最近我才认为代码行数只取决于完整的代码行数,我的意思是,每一行代码都或多或少有实际用途 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
),每个都被编译成一个委托(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/