可以按顺序使用'if - else - elseif'吗?

时间:2014-01-02 23:28:04

标签: c# if-statement

如果可能,我需要使用一些代码,其中' if'在' else'之后如下:

if (Car1.isEmpty)
{
    Do stuff
}
else 
{
    Car1.EmptyOut();
}
else if (Car2.isEmpty)
{
    Do stuff
}
else
{
    Car2.EmptyOut()
}

等等。这需要多次完成。基本上如果Car1不可用(因为它不是空的),需要使用Car2并且需要将Car1送回家以便清空。

我想知道它是否会进入下一个'否则 - 如果'但是声明。

6 个答案:

答案 0 :(得分:4)

也许你正在寻找“当第一辆车不能免费使用第二辆车时”?

if (Car1.isEmpty)
{
    Do stuff
}
else 
{
    Car1.EmptyOut();
    if (Car2.isEmpty)
    {
        Do stuff
    }
    else
    {
       Car2.EmptyOut()
    }
}

请注意,如果你有多个“汽车”使用某种类型的列表,LINQ查询可能更有意义。即

var firstEmpty = cars.Where(car => car.IsEmpty).FirstOrDefault();
if (firstEmpty != null)
{
    // use empty car
}
else
{ 
    // no empty cars - recover and maybe retry...
}

答案 1 :(得分:3)

不,这是不可能的。如果你需要执行这样的动作,那么使用循环

是个好主意
var carList = new List<car>();

for(var car in carList ) {
  if(car.isEmpty){
  //Do stuff
  } else {
    car.emptyOut();
  }
}

如果您不想使用循环,无论出于何种原因,您可以简单地将很多if语句放在一起

if(car1.isEmpty) {
  //Do stuff
} else {
  car1.emptyOut();
}

if(car2.isEmpty) {
  //Do stuff
} else {
  car2.emptyOut();
}

答案 2 :(得分:1)

没有。这是不允许的。这样做:

if (Car1.isEmpty)
{
    // Do stuff.
}
else 
{
    Car1.EmptyOut();

    if (Car2.isEmpty)
    {
        // Do stuff.
    }
    else
    {
        Car2.EmptyOut();
    }
}

由于你有很多车,如果你可以枚举他们的变量名,那么你可以使用reflection。例如:

using System;

class Car
{
    public Car(string name)
    {
        Name = name;
    }

    public bool isEmpty { get; set; }
    public string Name { get; set; }
    public void EmptyOut() { }
}

static class Program
{
    public static Car Car0 = new Car("Car0");
    public static Car Car1 = new Car("Car1");
    public static Car Car2 = new Car("Car2");
    public static Car Car3 = new Car("Car3");
    public static Car Car4 = new Car("Car4");
    public static Car Car5 = new Car("Car5");
    public static Car Car6 = new Car("Car6");
    public static Car Car7 = new Car("Car7");
    public static Car Car8 = new Car("Car8");
    public static Car Car9 = new Car("Car9");

    static void Main()
    {
        var type = typeof(Program);

        for (int i = 0; i <= 9; i++)
        {
            var field = type.GetField("Car" + i);
            var temp = (Car)field.GetValue(null);

            if (temp.isEmpty)
            {
                // Do stuff.
                break;
            }
            else
            {
                temp.EmptyOut();
            }
        }
    }
}

答案 3 :(得分:1)

你是说这个吗?

if (Car1.isEmpty)
{
    //Do stuff
}
else 
{
    Car1.EmptyOut();
    if (Car2.isEmpty)
    {
        //Do stuff
    }
    else
    {
        Car2.EmptyOut()
    }
}

答案 4 :(得分:1)

10辆车?如果你有超过几辆车,那么你应该这样做:

public bool Process( IEnumerable<Car> cars , Action<Car> process )
{
  bool success = false ;
  foreach( Car car in cars )
  {
    if ( car.IsEmpty )
    {
      process(car) ;
      success = true ;
      break ;
    }
    car.EmptyOut() ;
  }
  return success ;
}

答案 5 :(得分:0)

这在C#语法中是不可能的,设法使用Switch语句或嵌套的If Else语句