使用一个数组指向一个对象并打印到屏幕上

本文关键字:一个对象 打印 屏幕 数组 一个 | 更新日期: 2023-09-27 18:08:39

我在使用数组指向一个对象然后将该对象的内容打印到屏幕时遇到了问题。

到目前为止我的代码是:
 //Card
        Card cardPack = new Card();
        string[] myCard = new string[10];
        //card objects
        Card cardOne = new Card();
        {
            cardPack.name = "Vodka";
            cardPack.percentage = '5';
            cardPack.quality = '6';
            cardPack.quantity = '4';
            cardPack.taste = '3';
        }

据我所知,这段代码是有效的,因为我没有任何类型的错误。

        //Card Array
        myCard[0] = Convert.ToString(cardOne);

然后我使用this指向实际对象,同样没有错误,所以我假设它工作正常。

            Console.WriteLine(myCard[0]);

这也不会出错,但当我尝试运行程序时,我得到的唯一输出是

   "Card"

我很困惑!你能帮帮我吗?谢谢你!

使用一个数组指向一个对象并打印到屏幕上

您需要重写ToString()方法才能做到这一点。

请看下面的示例代码:

public override string ToString()
{
    string stringForm = string.Format("{0},{1},{2},{3},{4}", name,percentage, quality, quantity, taste);
    return stringForm;
}

您正在创建一个对象并将其转换为String而不是取其名称。这导致输出对象类型的名称,即'Card'。

试试这个:

//Card Array
myCard[0] = cardOne.name;

更好的方法是改变你的数组:

//string[] myCard = new string[10];
Card[] myCard = new Card[10];
myCard[0] = cardOne;
Console.WriteLine(myCard[0].name);

当然你可以覆盖ToString()方法,但我猜这不是你想要的。

编辑:在阅读了您对首选输出的评论后,这段代码可能会按照您的要求执行:

Console.WriteLine("Name: " + myCard[0].name);
Console.WriteLine("Percentage: " + myCard[0].percentage);
Console.WriteLine("Quality: " + myCard[0].quality);
Console.WriteLine("Quantity: " + myCard[0].quantity);
Console.WriteLine("Taste: " + myCard[0].taste);
Console.WriteLine("");

或如你所说:

Console.Write("myCard[0].name);
Console.Write(" " + myCard[0].percentage);
Console.Write(" " + myCard[0].quality);
Console.Write(" " + myCard[0].quantity);
Console.Write(" " + myCard[0].taste);
Console.WriteLine(""); 

请注意,这只适用于当你有你的数组转换为卡的数组,通过使用Card[] myCard = new Card[10];(考虑更改名称从'myCard'到'allCards'或类似的东西。

重写Card类的ToString方法

 public class Card
 {
    public string Name { get; set; }
    public override string ToString()
    {
         return string.Format("CardName: {0}", Name);
    }
 }

之后,您可以将Card对象存储在Card数组中,并且WriteLine将在控制台上显示正确的值(在ToString()中设置)。

Card[] myCard = new Card[10];
Card cardOne = new Card();
cardOne.name = ...
 myCard[0] = cardOne;
 Console.WriteLine(myCard[0]);

隐蔽。ToString将CardOne对象转换为字符串。这意味着它转换类名。你应该转换类中的显式对象。

  • 编辑Joetjah刚刚让你明白了我的意思。

您得到的输出是您存储在cardOne中的对象的名称,即一个"Card"对象。

如果你想要的是"Vodka",你的代码应该类似于:

//Card Array
myCard[0] = Convert.ToString(cardOne.name);

由于name已经是一个字符串,您可以将其简化为:

//Card Array
myCard[0] = cardOne.name;

不能按原样打印对象。

Console.WriteLine(myCard[0]);打印对象的类型,这就是为什么它返回"Card"

所以你必须访问对象的每个成员,然后打印它。

所以要获得成员你必须使用mycard[index].<member name>例:mycard[0].name

我希望这对你有帮助,否则请告诉我。

你可能想要的是:

Card[] myCard = new Card[10];
(...)
myCard[0] = cardOne;
然后

:

Console.WriteLine(myCard[0].ToString());

…将输出调用Card类型/类的ToString() -方法的结果。

我猜这就是你想要的?

;在Card

中添加如下内容
    public override string ToString()
    {
        return name + " " 
               + percentage + " "  
               + quality + " "  
               + quantity + " "  
               + taste + " " );
    }