C# 如何修复控制台写入类名称的问题?

C# 如何修复控制台写入类名称的问题?,c#,indexer,C#,Indexer,我是C#的新手,几个小时以来我一直在努力解决这个问题,非常感谢您的帮助 我想创建一个多边形并记下每个点的位置 目前我有: -类点 class Point { private int x; private int y; public Point(int x2, int y2) { x = x2; y = y2; } } -类多边形 class Polygon { private Point[] Points;

我是C#的新手,几个小时以来我一直在努力解决这个问题,非常感谢您的帮助

我想创建一个多边形并记下每个点的位置

目前我有: -类点

class Point
{
    private int x;
    private int y;


    public Point(int x2, int y2)
    {
        x = x2;
        y = y2;
    }
}
-类多边形

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;}
    }
}
类多边形
{
私人点[]点;
公共多边形(参数点[]a)
{
点=新点[a.长度];
for(int i=0;i
现在我的主要观点是:

        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]);
        }
Polygon First=新多边形(新点(7,4)、新点(4,1)、新点(2,1));
第一个[0]=新点(3,4);
控制台写入线(“多边形点”);
对于(int i=0;i
但是现在,我在控制台中看到的不是“多边形点”之后点的每个位置:

它应该是什么样子的:

它应该是什么样子的:

C#不像其他语言那样被“解释”,因此
Console.WriteLine
方法不会猜出您想要打印什么

要给出您正在寻找的结果,使用当前代码,您必须为
类提供公共属性:

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}");
}
for(int i=0;i
我添加了一个对
ToString
的重写,这样您的
类在转换为字符串时具有预期的输出。类似于
“x:3y:4”
的输出


现在,它很适合成为
结构,而不是

您需要知道一件事:
重写字符串ToString()
使用.ToString()提供解决方案重写对于这种情况来说似乎也很好。@CoderofCode我个人并不太喜欢重写
.ToString()
方法。但是如果您想在这里添加它,请继续。
ToString()
有合法的用例。@MickyD绝对正确。我只是不想把它作为一个对语言不熟悉的人的答案,因为误用它可能会导致相当困难的调试,从经验来看,但不管怎样,Theodor Zoulias的解决方案都是有效的。“对语言来说是新的”-啊,是的,很好的观点。通过提供属性,可以更清楚地了解正在发生的事情+先生好,非常感谢您的帮助,先生。成功了!。不客气,我的朋友!我希望大家竖起大拇指。:-)@你说得对。我更新了我的答案。
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}";
    }
}