首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ堆栈大小问题

LINQ堆栈大小问题
EN

Stack Overflow用户
提问于 2012-03-30 06:50:02
回答 1查看 73关注 0票数 0

我有一个问题,在我的公司中,我们使用毒性报告来测量静态代码,使用反射器代码度量作为毒性报告工具的输入,显然我可以看到代码的反汇编程序。我使用LINQ to Objects和to XML来使我的代码清晰,但我开始面临一些堆栈大小的问题。我看到了反汇编的代码,我开始注意到,在我包含" where“linq子句的地方,它生成了一个委托,还创建了一个方法,这显然增加了我的堆栈大小,因为它创建了更多的方法。有谁知道怎样才能摆脱委托吗?下面是一个例子:

源代码:

代码语言:javascript
复制
List<XElement> toolPnP = 
(from c in xPnpInfo.Descendants("assignedSupport")
 where c != null
 select c).ToList();

反汇编代码:

代码语言:javascript
复制
List<XElement> toolPnP = xPnpInfo.Descendants((XName) ("assignedSupport")).Where<XElement>(delegate (XElement c) {
 return (c != null);
 }).ToList<XElement>();

这些委托指向:

代码语言:javascript
复制
[CompilerGenerated]
private static bool <.ctor>b__2(XElement c)
{
    return (c != null);
}

我怎样才能摆脱它,任何推荐都会很受欢迎。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-30 06:54:45

除了微不足道的回答(Descendents属性不会给你提供空结果,所以你不需要测试它),没有...如果没有方法调用,就不能使用linq的where。

编译器将where转换为对System.Linq.Enumerable.Where的调用,这需要一个方法引用。如果您不喜欢编译器生成的方法,可以自己编写方法,但是如果您使用的是where,则必须有一个方法。

代码语言:javascript
复制
Func<XElement, bool> myFunc = this.FilterMethod;
List<XElement> result = xPnpInfo.Descendants("assignedSupport")
  .Where(myFunc)
  .ToList();

..。

代码语言:javascript
复制
public bool FilterMethod(XElement source)
{
  return source != null;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9934689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档