0

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

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

 //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"

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

4

7 回答 7

3

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

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

public override string ToString()
{
    string stringForm = string.Format("{0},{1},{2},{3},{4}", name,percentage, quality, quantity, taste);
    return stringForm;
}
于 2013-04-10T11:22:08.360 回答
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”或类似的东西。

于 2013-04-10T11:20:49.157 回答
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]);
于 2013-04-10T11:22:49.483 回答
0

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

  • 编辑 Joetjah 刚刚向您展示了我的意思。
于 2013-04-10T11:21:56.587 回答
0

您不能按原样打印对象。

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

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

因此,要获得您必须使用的成员,mycard[index].<member name> 例如:mycard[0].name

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

于 2013-04-10T11:22:40.867 回答
0

你可能想要的是:

Card[] myCard = new Card[10];

(...)

myCard[0] = cardOne;

然后这个:

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

...将输出调用ToString()type/class 的 -method 的结果Card

我假设这就是你想要的?

更新;将这样的内容添加到您的Card课程中

    public override string ToString()
    {
        return name + " " 
               + percentage + " "  
               + quality + " "  
               + quantity + " "  
               + taste + " " );
    }
于 2013-04-10T11:23:35.230 回答
0

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

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

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

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

//Card Array
myCard[0] = cardOne.name;
于 2013-04-10T11:24:56.517 回答