Как починить консольную запись имени класса? [Дубликат]

2

Я новичок в С#, и я борюсь с этим с незапамятных времен и был бы признателен за вашу помощь.

Я хочу создать многоугольник и записать каждую позицию точек.

В настоящее время у меня есть это: -Class Point

class Point
{
    private int x;
    private int y;


    public Point(int x2, int y2)
    {
        x = x2;
        y = y2;
    }
}

-Class Полигон

class Polygon
{
    private Point[] Points;

    public Polygon(params Point[] a)
    {
        Points = new Point[a.Length];
        for (int i = 0; i < a.Length; i++)
        {
            Points[i] = a[i];
        }
    }

    public Point this[int index]
    {
        get { return Points[index]; }
        set { Points[index] = value;}
    }
}

Теперь у меня есть это в моей главной:

        Polygon First= new Polygon(new Point(7,4), new Point(4,1), new Point(2, 1));

        First[0] = new Point(3, 4);

        Console.WriteLine("points of polygon ");
        for (int i = 0; i < First.PointCounter; i++)
        {
            Console.WriteLine(First[i]);
        }

Но теперь вместо того, чтобы видеть каждую позицию точки после "точек многоугольника", я вижу это в своей консоли: https://imgur.com/Z5aVFMK

Как это должно выглядеть: https://imgur.com/a/aFkdrEF

Как это должно выглядеть: https://imgur.com/a/aFkdrEF

  • 2
    Одна вещь, которую вам нужно знать: override string ToString()
Теги:

2 ответа

1
Лучший ответ

Я добавил переопределение ToString чтобы ваш класс Point имел ожидаемый результат при преобразовании в строку. Вывод наподобие "x:3 y:4".

class Point
{
    public int x { get; private set; }
    public int y { get; private set; }

    public Point(int x2, int y2)
    {
        x = x2;
        y = y2;
    }

    public override string ToString()
    {
        return $"x:{x,-3} y:{y,-3}";
    }
}

Как и сейчас, это хороший кандидат на то, чтобы стать struct а не class.

  • 0
    Большое спасибо за вашу помощь, сэр. Это сработало!.
  • 0
    Не за что мой друг! Я был бы признателен за большие пальцы. :-)
Показать ещё 1 комментарий
1

С# не "интерпретируется", как другие языки, поэтому метод Console.WriteLine не будет угадывать, что вы пытаетесь напечатать.

Чтобы получить результат, который вы ищете, с вашим текущим кодом вам нужно будет предоставить открытые свойства вашему классу Point:

public int X { get { return x;} set{ x = value;} }
public int Y { get { return y;} set{ y = value;} }

После чего вы можете получить доступ к этим свойствам в цикле for:

for (int i = 0; i < First.PointCounter; i++)
{
    Console.WriteLine($"x:{First[i].X}    y:{First[i].Y}");
}
  • 1
    Предоставьте решение с переопределением .ToString (), что также кажется довольно хорошим для этого случая.
  • 0
    @CoderofCode Лично я не очень заинтересован в переопределении .ToString() . Но если вы хотите добавить это сюда, пожалуйста, продолжайте.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню