使用数组指向对象并打印到屏幕?

时间:2013-04-10 11:18:19

标签: c# arrays object pointers

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

到目前为止,我的代码是:

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

然后我用它来指向实际的对象,再次这不是错误所以我认为它工作正常。

            Console.WriteLine(myCard[0]);

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

   "Card"

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

7 个答案:

答案 0 :(得分:3)

您需要覆盖ToString()方法才能执行此操作。

请参阅以下代码作为示例:

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

答案 1 :(得分:1)

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

试试这个:

//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”或类似内容。

答案 2 :(得分:1)

覆盖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]);

答案 3 :(得分:0)

Covert.ToString将CardOne对象转换为字符串。这意味着转换类名称。您应该在类中转换显式对象。

  • 编辑 Joetjah只是告诉你我的意思。

答案 4 :(得分:0)

您无法按原样打印对象。

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

因此,您必须访问该对象的每个成员,然后将其打印出来。

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

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

答案 5 :(得分:0)

你可能想要的是:

Card[] myCard = new Card[10];

(...)

myCard[0] = cardOne;

然后这个:

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

...将输出调用类型/类ToString()的{​​{1}} - 方法的结果。

我假设那是你想要的?

<强>更新;将这样的内容添加到Card

Card

答案 6 :(得分:0)

您获得的输出是您存储在cardOne中的对象的名称,即“卡片”对象。

如果你想要的是“伏特加”,你的代码应该类似于:

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

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

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