我可以只在c#中执行嵌套的特定部分吗?

时间:2017-04-04 12:17:15

标签: c# asp.net logic

这不是实际的代码,但这是我想要做的。

for循环必须但是嵌套的if else循环应该根据count_final的值执行,count_final的值可以是1到3之间的随机值。

如果count_final的值为3,则应考虑所有if ... else循环。但是如果count_final的值是2,那么只有...(第一)否则if和else部分只被执行。如果count_final = 1,那么只有if和else部分被执行(而不是其他任何 - 如果)。

考虑在每个if ...中添加另一个if ... else并检查count_final,但是当count_final = 1时我没有得到count2和count3的值。 同样,当count_final = 2时,我没有得到count3的值。

如果您不理解我的问题,请在评论中提问。

int count_final=Session["abc"];
//count_final=1;
//count_final=2;
//count_final=3;

for(int i=1;i<=10;i++)
{
    if ((count1 <= count5) && (count1 <= count6))
    {
        Label1.Text="Hello1";
    }
    else if (count2 <= count4 && count2 <= count6)
    {
        Label2.Text="Hello2";
    }
    else if (count3 <= count4 && count3 <= count5)
    {
        Label3.Text="Hello3";
    }
    else
    {
        Label1.Text="Hello1";
    }
}

4 个答案:

答案 0 :(得分:1)

似乎你收集了&#34;条件&#34;执行条件的数量取决于finalCount的值。

var rules = new Func<string>[]
{
    () => (count1 <= count5 && count1 <= count6) ? "Hello1" : null,
    () => (count2 <= count4 && count2 <= count6) ? "Hello2" : null,
    () => (count3 <= count4 && count3 <= count5) ? "Hello3" : null
};

Label1.Text = rules.Take(finalCount)
                   .Select(rule => rule())
                   .Where(result => result != null)
                   .DefaultIfEmpty("Hello1")
                   .First();

当然这个解决方案假设finalCount总是1,2或3。 DefaultIfEmpty正在扮演最后else的角色 - 将在所有条件失败时使用。

答案 1 :(得分:0)

我建议扩展else if声明的条件:

int count_final=Session["abc"];
//count_final=1;
//count_final=2;
//count_final=3;

for(int i=1; i<=10; i++)
{
    if ((count1 <= count5) && (count1 <= count6))
    {
        Label1.Text="Hello1";
    }
    else if (count_final >= 2 && count2 <= count4 && count2 <= count6)
    {
        Label2.Text="Hello2";
    }
    else if (count_final >= 3 && count3 <= count4 && count3 <= count5)
    {
        Label3.Text="Hello3";
    }
    else
    {
        Label1.Text="Hello1";
    }
}

count_final == 1这不会尝试评估count2count3count4时(我理解这是一项要求),因为&&不会对其进行评估左边有false的右侧。

答案 2 :(得分:0)

如果我理解正确..这有点不太可能

只需为ifs添加更多条件!

public class Main extends Application {
    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));

        Scene scene = new Scene(root);
        stage.setScene(scene);
        // stage.setFullScreen(true);
        // stage.initStyle(StageStyle.UNDECORATED);
        stage.show();

        registerSceneSwitchHandler(stage, scene, "scene2.fxml");
    }

    private void registerSceneSwitchHandler(Stage stage, Scene scene, String resource) {

      KeyCombination ctrlD = KeyCodeCombination.keyCombination("Ctrl+D");
      scene.addEventFilter(KeyEvent.KEY_PRESSED, ke -> {
          if (ctrlD.match(ke)) {
              System.out.println("Key Pressed: " + ctrlD);
              try {
                  Parent root = FXMLLoader.load(getClass().getResource(resource));
                  Scene newScene = new Scene(root);

                  String returnResource ;
                  if ("scene2.fxml".equals(resource)) {
                      returnResource = "FXMLDocument.fxml";
                  } else {
                      returnResource = "scene2.fxml";
                  }

                  registerSceneSwitchHandler(stage, newScene, returnResource);

                  stage.setScene(scene);

               } catch (IOException ex) {
                   ex.printStackTrace();
               }
          }
      });

    }

    public static void main(String[] args) {
        launch(args);
    }

}

记住,根据我的理解,将会出现无法实现的循环,例如,如果initialize()且不小于或等于 if ((count1 <= count5) && (count1 <= count6)) { if (count_final == 3 || count_final == 2) Label1.Text="Hello1"; } else if (count2 <= count4 && count2 <= count6) { if (count_final == 3) Label2.Text="Hello2"; } else if (count3 <= count4 && count3 <= count5) { if (count_final == 3) Label3.Text="Hello3"; } else { if (count_final == 3 || count_final == 1) Label1.Text="Hello1"; } count_final == 2,则不会发生任何事情,与count5相同,如果它匹配任何第一位,则最后一次不会发生。

答案 3 :(得分:0)

这是你在找什么?使用较少的if / else语句:

int count_final = Session["abc"];  // random between 1 and 3

for(int i=1; i <= 10; i++)
{
    switch(count_final)
    {
        case 3:
            Label1.Text="Hello1";
        // no break; so all gets executed
        case 2:
            Label2.Text="Hello2";
        case 1:
            Label3.Text="Hello3";
        default: Label1.Text="Hello1";
    }
}