Как вызвать строку, отображаемую в методе, в другой класс? - PullRequest
0 голосов
/ 09 октября 2019

У меня проблемы с отображением метода, который содержит строку в другом классе.

Основная программа

 Vehicle car = new Vehicle("Toyota", "Camry", 500, "Red", 30, 3, 2);
            car.Display();

Автомобиль

public void Display()
{
    string output = string.Format("MK: {0} MDL: {1} WGT: {2} CLR: {3} MPG: {4} ",
                make, model, weight, color, mpg, tank.GetDisplayString());

    System.Console.WriteLine(output);
}

GasTank

public string GetDisplayString()
{
    string output = string.Format("TANK: Cap: {0} LEVEL: {1}", tankCapacity, tankLevel);

    return output;  
}

public void display()
{
    System.Console.WriteLine(GetDisplayString());
}

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

В строке формата string.Format в методе отображения вашего класса Vehicle отсутствует символ 5-го аргумента, {5}. Чтобы это исправить, вы можете просто добавить {5} к строке формата:

string output = string.Format("MK: {0} MDL: {1} WGT: {2} CLR: {3} MPG: {4} {5}",
                make, model, weight, color, mpg, tank.GetDisplayString());

, добавить отдельно:

string output = string.Format("MK: {0} MDL: {1} WGT: {2} CLR: {3} MPG: {4} ",
                make, model, weight, color, mpg) + tank.GetDisplayString();

или отформатировать, используя $:

string output = $"MK: {make} MDL: {model} WGT: {weight} CLR: {color} MPG: {mpg} {tank.GetDisplayString()}"; //This is the same as string.Format just a bit more condensed
0 голосов
/ 09 октября 2019

Ваша проблема в плохом дизайне. Класс должен иметь как можно меньше обязанностей, поэтому отображение себя пользователю не должно быть одним из них.

Кроме того, в методе Vehicle.Display вы не используете tank.GetDisplayString()

Также у вас есть методы «отображения», которые не нужны, то есть метод ToString, унаследованный от object, должен возвращать «строковое представление» вашего объекта, поэтому вы должны переопределить его.

Я предлагаю более чистый подход:

Автомобиль

public override string ToString()
{
    // where tank.ToString() should go? It is not used here...
    return string.Format("MK: {0} MDL: {1} WGT: {2} CLR: {3} MPG: {4} ",
        make, model, weight, color, mpg, tank.ToString());
    // also you can use interpolated string
    // return $"MK: {make} MDL: {model} WGT: {weight} CLR: {color} MPG: {mpg} ";
}

Бензобак

public override string ToString()
{
    return string.Format("TANK: Cap: {0} LEVEL: {1}", tankCapacity, tankLevel);
}

public void display()
{
   System.Console.WriteLine(GetDisplayString());
}

Затем для отображения ваших классов вы можете использовать просто:

Console.WriteLine(myVahicle.ToString());
Console.WriteLine(myGasTank.ToString());
...