Lambda表达式的代码覆盖率

我在我的代码中看到了一个模式,其中lambda表达式显示为未覆盖在代码覆盖中,调试器会逐步执行代码并且没有条件块。

public CollectionModel() { List languages = LanguageService.GetLanguages(); this.LanguageListItems = languages.Select( s => new SelectListItem { Text = s.Name, Value = s.LanguageCode, Selected = false }). // <-- this shows as not covered AsEnumerable(); } 

这有点奇怪。 有任何想法吗?

我认为你的意思是调试器没有跨越指示的行; 是对的吗?

如果这是你的问题,那么答案是,至少在这种特殊情况下,你看到的是延期执行System.Linq.Enumerable提供的所有LINQ扩展方法都表现出这种行为:即,lambda语句本身内的代码不会在您定义它的行上执行。 只有在枚举结果对象后才会执行代码。

在您发布的代码下面添加:

 foreach (var x in this.LanguageListItems) { var local = x; } 

在这里,您将看到调试器跳回到您的lambda。