【发布时间】:2013-07-10 06:53:22
【问题描述】:
我在执行 CQLinq 查询时遇到了一个小问题。
我正在尝试使用指定的全名获取已过时的方法,这意味着我想具体指定全名已过时的方法。
结果应该会弹出 5 个匹配项,这意味着应该包含已过时的 callMe() 方法:
但是,当我执行此查询时, callMe() 不包括在内!
// <Name>Don't use obsolete types, methods or fields</Name>
warnif count > 0
let oConcreteM = new String[] {"usageAssembly.Class1.callMe()"}
let obsoleteTypes = Types.Where(t => t.IsObsolete)
let obsoleteMethods = Methods.Where(m => m.IsObsolete
&& oConcreteM.Contains(m.FullName)).ToHashSet() //TODO HERE!! (Specify callMe())
from m in JustMyCode.Methods.UsingAny(obsoleteTypes).Union(
JustMyCode.Methods.UsingAny(obsoleteMethods)).Union(
JustMyCode.Methods.UsingAny(obsoleteFields))
let obsoleteTypesUsed = obsoleteTypes.UsedBy(m)
// Optimization: MethodsCalled + Intersect() is faster than using obsoleteMethods.UsedBy()
let obsoleteMethodsUsed = m.MethodsCalled.Intersect(obsoleteMethods)
let obsoleteFieldsUsed = obsoleteFields.UsedBy(m)
select new { m,obsoleteTypesUsed, obsoleteMethodsUsed, obsoleteFieldsUsed }
通过上面的查询,callMe() 消失了,但要获得 5 个匹配项,我们必须删除“&& oConcreteM.Contains(m.FullName)”代码但我不想,我想要的是检查如果名称与 oConcreteM 中的方法全名匹配。 这是输出给我的:
希望大家能帮帮我:)
【问题讨论】: