Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 独立小问题检查过时的方法名称_C#_Linq_Ndepend_Cqlinq - Fatal编程技术网

C# 独立小问题检查过时的方法名称

C# 独立小问题检查过时的方法名称,c#,linq,ndepend,cqlinq,C#,Linq,Ndepend,Cqlinq,我在执行CQLinq查询时遇到了一个小问题 我正在尝试获取使用指定的全名过时的方法,这意味着我要指定使用全名过时的方法 结果应弹出5个匹配项,这意味着应包括过时的callMe()方法: 但是,执行此查询时不包括callMe() // <Name>Don't use obsolete types, methods or fields</Name> warnif count > 0 let oConcreteM = new String[] {"usageAs

我在执行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 }
//不要使用过时的类型、方法或字段
如果计数大于0,则警告
让oConcreteM=newstring[]{“usageAssembly.Class1.callMe()”}
让obsoleteTypes=Types.Where(t=>t.IsObsolete)
设ObsoletMethods=方法,其中(m=>m.Isobsolite
&&oConcreteM.Contains(m.FullName)).ToHashSet()//TODO HERE!!(指定callMe())
从JustMyCode.Methods.UsingAny(obsoleteTypes.Union)中的m开始(
JustMyCode.方法.使用任何(废弃方法)).联合(
JustMyCode.方法.使用任何(废弃场)
let obsoleteTypesUsed=obsoleteTypes.UsedBy(m)
//优化:MethodScaled+Intersect()比使用ObsoletMethods.UsedBy()更快
让ObsoletMethodsUsed=m.MethodScaled.Intersect(ObsoletMethods)
let obsoleteFields used=obsoleteFields.UsedBy(m)
选择新建{m,废弃类型使用,废弃方法使用,废弃字段使用}
在上面的查询中,callMe()消失了,但要获得5个匹配项,我们必须删除“&&oConcreteM.Contains(m.FullName)”代码,但我不想这样做,我想检查的是oConcreteM中的方法FullName中的名称是否匹配。 以下是输出给我的信息:


我希望你们能帮我:)

所以要回答这个问题:

我想列出通过字符串列表(定义全名)定义的方法,这些字符串是过时的+对于每个匹配的方法,列出使用的过时类型/方法/字段


因此,要回答这个问题:

我想列出通过字符串列表(定义全名)定义的方法,这些字符串是过时的+对于每个匹配的方法,列出使用的过时类型/方法/字段


还是一样,我希望callMe()也打印出来。但话说回来,它似乎只给med提供了“4种匹配的方法”,但我想要“5种匹配的方法”,这意味着我只想打印出oConcreteM中给出的方法,而忽略任何其他过时的方法。如果可能的话,您想在哪里只打印出oConcreteM中给出的那些方法?在第一列中还是在另一列中?如果在另一列中,那么您希望在第一列中看到哪个代码元素?在第一列中。我想用给定的代码得到图1的结果,我希望它不要像我包含“&&oConcreteM.Contains(m.FullName)).ToHashSet()”时那样忽略“callMe()”。我无法理解您想要做的逻辑。用简单的英语描述您的查询,例如:“我想列出名为CallMe()的方法,这些方法使用任何过时的类型/方法/字段+对于匹配的每个方法,列出使用的过时的类型/方法/字段”仍然相同,我想打印CallMe()。但话说回来,它似乎只给med提供了“4种匹配的方法”,但我想要“5种匹配的方法”,这意味着我只想打印出oConcreteM中给出的方法,而忽略任何其他过时的方法。如果可能的话,您想在哪里只打印出oConcreteM中给出的那些方法?在第一列中还是在另一列中?如果在另一列中,那么您希望在第一列中看到哪个代码元素?在第一列中。我想用给定的代码得到图1的结果,我希望它不要像我包含“&&oConcreteM.Contains(m.FullName)).ToHashSet()”时那样忽略“callMe()”。我无法理解您想要做的逻辑。用简单的英语描述您的查询,例如:“我想列出名为CallMe()的方法,这些方法使用任何过时的类型/方法/字段+对于每个匹配的方法,列出使用的过时类型/方法/字段”
let methods=  Application.Methods.WithFullNameIn(
                         "Namespace1.Class1.Method1()", 
                         "Namespace2.Class2.Method2()") // Put more full names here
                         .Where( m => m.IsObsolete)

from m in methods
// Here we cannot easily define m.TypesUsed, hence we use an astute
let obsoleteTypesUsed = m.ParentType.TypesUsed.Where(t => t.IsObsolete).Where(t => t.IsUsedBy(m))
let obsoleteMethodsUsed = m.MethodsCalled.Where(m1 => m1.IsObsolete)
let obsoleteFielsUsed = m.FieldsUsed.Where(f => f.IsObsolete)
select new { m, obsoleteTypesUsed, obsoleteMethodsUsed, obsoleteFielsUsed }