2016-03-20 5 views
0

まあ、単に、私は(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; 
    } 
} 

であり、これは私のバスですクラス

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); 
    } 
} 

は今、問題がある: 私はインスタンス化すると、構造体とクラスの両方(の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); 
} 

それは(Bus.cs以内)この行であるようだ。

currentPassengers = Line.passengersNumber + newPassengers - passengerLeaves; 

Line.passengersNumber = 0常に と

if (currentStop == this.Line.stopsNumber) 

this.Line.stopsNumberは常に今ゼロ あるので、occuresことはありません私はstructsの私の使用で何かが間違っていることを理解しますが、私はBusLine.csのctorでそれらを初期化するので、値はどうしてBus.csで使用すると0になりますか? 先輩に感謝

+0

ブレークポイントを設定し、デバッガを使用してコードをステップ実行することをお勧めします。 – MethodMan

+0

'bus'オブジェクトで' Line'のインスタンスをインスタンス化することは決してありません。これを行う必要があります: 'bus.Line = BLine' –

+0

問題を最小限に抑えてください。実際に関連していない騒音がここにあるようです。 – kai

答えて

6

BLINEをバスのラインに設定していないようです。あなたはBLINEがちょうど同じタイプのものとは別にbus.Lineとは何の関係もない、それを行うまで

Bus bus = new Bus() { Line = BLine }; 

:にそのバスの宣言を変更します。

+0

Worked。あなたがProgram.cs内のBusLine ctorを初期化すると、Bus.cs内のデータ型BusLineの変数Lineを使用するのに十分であるはずです。 – N3wbie

+0

いいえ、あなたの質問では、2つの別々のBusLinesをインスタンス化しました。バスに住んでいる。プログラムに座っている人はあなたが入力したすべての情報を持っていますが、バスの内部にはまだデフォルト値があります。それがあなたの問題を解決したら、私はあなたの答えをそのようにマークすることに感謝します。ありがとう:) – paste

関連する問題