我在执行 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 中的方法全名。这是输出给我的:
我希望你们在那里可以帮助我:)