在类中使用结构时,值为零

N3w*_*bie 0 c# struct class

好吧,简单地说,我现在学习结构(C#的新手)这是我的结构(+ ctor)

public struct BusLine
{
    public int busNumber { get; set; }
    public int passengersNumber { get; set; }
    public double drivePrice { get; set; }
    public double distanceBeginToEnd { get; set; }
    public int stopsNumber { get; set; }

    public BusLine(int _busNumber, int _passengersNumber, double _drivePrice, double _distanceBeginToEnd, int _stopsNumber)
    {
        busNumber = _busNumber;
        passengersNumber = _passengersNumber;
        drivePrice = _drivePrice;
        distanceBeginToEnd = _distanceBeginToEnd;
        stopsNumber = _stopsNumber;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的巴士班

public class Bus
{
    public BusLine Line { get; set; }
    public int currentPassengers { get; set; }
    public int currentStop { get; set; } = 1;

    public void EnterStation(int newPassengers, int passengerLeaves)
    {
        currentPassengers = Line.passengersNumber + newPassengers - passengerLeaves;
    }
    public string Drive()
    {
        if (currentStop == this.Line.stopsNumber)
        {
            return string.Format("Stop number: {0}\nPassengers quantity: {1}\nThis is the final STOP!\n", currentStop, currentPassengers);
        }
        return string.Format("Stop number: {0}\nPassengers quantity: {1}\n", currentStop++, currentPassengers);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是:当我以这种方式实例化struct和class时(在Program.cs中):

Random rand = new Random();
BusLine BLine = new BusLine(_busNumber: 88, _passengersNumber: 22, _drivePrice: 6.90, _distanceBeginToEnd: 101.4, _stopsNumber: 15);
Bus bus = new Bus();
while (BLine.stopsNumber != 0)
{
    BLine.stopsNumber--;
        bus.EnterStation(rand.Next(1, 12), rand.Next(1, 12));
        string getDrive = bus.Drive();
        Console.WriteLine(getDrive);
}
Run Code Online (Sandbox Code Playgroud)

它似乎是这一行(在Bus.cs内):

currentPassengers = Line.passengersNumber + newPassengers - passengerLeaves;
Run Code Online (Sandbox Code Playgroud)

Line.passengersNumber = 0总是和

if (currentStop == this.Line.stopsNumber)
Run Code Online (Sandbox Code Playgroud)

从来没有发生过this.Line.stopsNumber总是零现在我明白我使用结构的东西是错误的,但我在BusLine.cs的ctor中初始化它们,那么在Bus.cs中使用时它们的值如何仍为0 ?谢谢你们

小智 6

看起来你从未将BLine设置为公交线路.将该总线声明更改为:

Bus bus = new Bus() { Line = BLine };
Run Code Online (Sandbox Code Playgroud)

直到你这样做,BLine与bus.Line无关.除了只是同一类型.