如何在c#中使用两个条件的ForEach

时间:2016-07-13 09:54:31

标签: c# foreach

foreach (VXmlNode.VObject func in GetObjectsByPath("Function"))
{
    BooleanExpression fexpr = func.GetPresenceCondition();

    foreach (VXmlNode.VObject Objectparameter in func.GetObjectsByPath("Parameter") && func.GetObjectsByPath("Return"))
    {
        BooleanExpression parapresenceCondition = Objectparameter.GetPresenceCondition();
    }
}

正如您在上面的代码中看到的那样,我想要的是:

foreach (VXmlNode.VObject Objectparameter in func.GetObjectsByPath("Parameter") && func.GetObjectsByPath("Return"))

在我的代码中,条件不能存在于foreach循环中,但有人可以告诉我相当于此。任何人都可以提出如何做的建议吗?我正在尝试获取XML对象并使用它们执行某些操作。任何帮助,将不胜感激。感谢。

5 个答案:

答案 0 :(得分:1)

使用TakeWhile

来自文档:

loadingView.setClickable(true);

因此,您可以添加多个条件loadingView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // do something here if you want } });

答案 1 :(得分:1)

你想要的是Zip方法

string[] fruits = { "apple", "passionfruit", "banana", "mango", 
                    "orange", "blueberry", "grape", "strawberry" };

IEnumerable<string> query =
            fruits.TakeWhile((fruit, index) => fruit.Length >= index);

foreach (string fruit in query)
{
    Console.WriteLine(fruit);
}

答案 2 :(得分:1)

不太确定你要做什么。代码没有任何意义。

func.GetObjectsByPath("Parameter") && func.GetObjectsByPath("Parameter")

&&的两侧都有相同的代码。这是对的吗?

也就是说,你可以尝试使用LINQ SelectMany来压缩层次结构或Zip,如Luca建议的那样。

<强>更新

您可以使用Concat或Union。 Zip也可以做到这一点。取决于你想要的结果。

foreach(var item in func.GetOBjectsByPath("Par1").Concat(func.GetOBjectsByPath("Par2"))

答案 3 :(得分:1)

您的问题是模糊的,例如怎么可以

func.GetObjectsByPath("Parameter")

成为条件(即返回truefalse),同时作为集合通过foreach循环进行枚举?不过,我建议使用 Linq 及其Where过滤器:

  var source = GetObjectsByPath("Function")
    .Where(func => func.GetObjectsByPath("Parameter")) // condition on func
    .SelectMany(func => func.GetObjectsByPath("Parameter")) // get all parameters flatten
    .Select(prm => prm.GetPresenceCondition());

  foreach (BooleanExpression parapresenceCondition in source) {
    ...
  }

请注意,您可以根据需要添加任意数量的条件:

  var source = GetObjectsByPath("Function")
    .Where(func => ...) // condition on func
    .Where(func => ...) // && another condition on func
    .SelectMany(func => func.GetObjectsByPath("Parameter")) // get all parameters flatten
    .Where(prm => ... ) // condition on parameter
    ....

答案 4 :(得分:0)

看起来您只想在foreach循环中执行语句,即

BooleanExpression parapresenceCondition = Objectparameter.GetPresenceCondition();

...适用于Objectparameter func.GetObjectsByPath("Parameter")返回的所有元素func.GetObjectsByPath("Return")

为此你只需要组合( concatenate )两个列表并迭代生成的列表,如下所示:

var parameters = func.GetObjectsByPath("Parameter");
var results = func.GetObjectsByPath("Return");

foreach (VXmlNode.VObject Objectparameter in parameters.Concat(results))
{
    BooleanExpression parapresenceCondition = Objectparameter.GetPresenceCondition();
}