NDepend查询无法排除To开头方法问题求助
解决NDepend查询中无法排除以To开头方法的问题
我正在编写一个NDepend查询,用于找出所有未被其他方法调用的死代码方法,但需要排除ToString()、ToInt32()这类名称以To开头的方法。当前查询中使用了!m.SimpleName.StartsWith("To*")条件,却仍会返回ToString()、ToChar()、ToInt32()这类方法,请问我遗漏了什么?
当前查询代码:
// <Name>Methods that are not called</Name> // <Description>Shows all Methods that could be removed</Description> from m in JustMyCode.Methods where m.NbMethodsCallingMe == 0 && !m.IsConstructor && !m.IsAbstract && !m.SimpleName.StartsWith("get_") && !m.SimpleName.StartsWith("set_") && !m.SimpleName.StartsWith("<>f") && !m.SimpleName.Contains("callback") && !m.SimpleName.Contains("TClient") && !m.SimpleName.StartsWith("To*") && !m.SimpleName.StartsWith("From*") && !m.SimpleName.Contains("Click") && m.SimpleName != "BeginInvoke" && m.SimpleName != "EndInvoke" && m.SimpleName != ".cctor" select new { m, MethodName = m.SimpleName, Count= m.NbMethodsCallingMe}
问题出在StartsWith的参数使用上:StartsWith方法是精确匹配前缀字符串,不需要额外添加通配符*。你写的"To*"会被当作完整的前缀字面量去匹配,只有方法名以"To*"(带星号)开头的才会被排除,这显然不是你想要的效果,所以ToString()这类方法自然不会被过滤掉。
只需要去掉通配符,直接使用"To"和"From"作为StartsWith的参数即可,修正后的查询代码如下:
// <Name>Methods that are not called</Name> // <Description>Shows all Methods that could be removed</Description> from m in JustMyCode.Methods where m.NbMethodsCallingMe == 0 && !m.IsConstructor && !m.IsAbstract && !m.SimpleName.StartsWith("get_") && !m.SimpleName.StartsWith("set_") && !m.SimpleName.StartsWith("<>f") && !m.SimpleName.Contains("callback") && !m.SimpleName.Contains("TClient") && !m.SimpleName.StartsWith("To") && !m.SimpleName.StartsWith("From") && !m.SimpleName.Contains("Click") && m.SimpleName != "BeginInvoke" && m.SimpleName != "EndInvoke" && m.SimpleName != ".cctor" select new { m, MethodName = m.SimpleName, Count= m.NbMethodsCallingMe}
这样就能正确排除所有以To或From开头的方法了。
内容的提问来源于stack exchange,提问作者Peter M.
相关产品推荐
相关产品推荐

