本文整理汇总了C#中Seq.Contains方法的典型用法代码示例。如果您正苦于以下问题:C# Seq.Contains方法的具体用法?C# Seq.Contains怎么用?C# Seq.Contains使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Seq
的用法示例。
在下文中一共展示了Seq.Contains方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: TryReduceLooping
private string TryReduceLooping(BasicBlock root)
{
var loops = BasicBlockUtils.Loops(root);
foreach (var loop in loops)
{
if (loop.Body.Count > 1)
{
var isCandidateLoop = true;
foreach (var bb in loop.Body)
{
// Any try and candidate loops must live entirely within loop body.
// Other instructons can transition out of loop.
switch (bb.Flavor)
{
case BasicBlockFlavor.Try:
{
var trybb = (TryBasicBlock)bb;
if (!loop.Body.Contains(trybb.Body))
isCandidateLoop = false;
break;
}
case BasicBlockFlavor.LoopCandidate:
{
var loopbb = (LoopCandidateBasicBlock)bb;
if (!loop.Body.Contains(loopbb.Head) || !loop.Body.Contains(loopbb.Break))
isCandidateLoop = false;
break;
}
}
}
if (isCandidateLoop)
{
loop.Label = gensym();
var candidateBreakTarget = default(BasicBlock);
foreach (var bb in loop.Body)
{
if (!bb.Equals(loop.Head) && !bb.Equals(loop.Tail) && loop.ContinueTarget != null)
{
var rule = default(string);
switch (bb.Flavor)
{
case BasicBlockFlavor.Root:
break;
case BasicBlockFlavor.Jump:
rule = ContinueReduceJump(root, loop, (JumpBasicBlock)bb);
break;
case BasicBlockFlavor.Leave:
break;
case BasicBlockFlavor.Branch:
rule = ContinueReduceBranch(root, loop, (BranchBasicBlock)bb);
break;
case BasicBlockFlavor.Switch:
break;
case BasicBlockFlavor.Try:
break;
case BasicBlockFlavor.LeaveTry:
rule = ContinueReduceLeaveTry(root, loop, (LeaveTryBasicBlock)bb);
break;
case BasicBlockFlavor.LeaveCatch:
rule = ContinueReduceLeaveCatch(root, loop, (LeaveCatchBasicBlock)bb);
break;
case BasicBlockFlavor.EndFault:
break;
case BasicBlockFlavor.EndFinally:
break;
case BasicBlockFlavor.NonReturning:
break;
case BasicBlockFlavor.LoopCandidate:
break;
default:
throw new ArgumentOutOfRangeException();
}
if (rule != null)
return rule;
}
foreach (var t in bb.Targets)
{
if (!loop.Body.Contains(t))
{
if (candidateBreakTarget == null && bb.Block.AfterState.Depth == 0)
candidateBreakTarget = t;
else if (candidateBreakTarget != null && !candidateBreakTarget.Equals(t))
// can never be a valid target, so signals no unique break
candidateBreakTarget = root;
}
}
}
if (candidateBreakTarget != null && !candidateBreakTarget.Equals(root) && loop.LoopControl != null)
{
var removed = new Seq<BasicBlock>();
var added = new Seq<BasicBlock>();
foreach (var bb in loop.Body)
{
if (!bb.Equals(loop.LoopControl))
{
switch (bb.Flavor)
{
//.........这里部分代码省略.........