我在使用数组指向对象然后将该对象的内容打印到屏幕时遇到问题。
到目前为止,我的代码是:
//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"
我很困惑! 你能帮我么?谢谢!
答案 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对象转换为字符串。这意味着转换类名称。您应该在类中转换显式对象。
答案 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;