我正在制作二十一点游戏,到目前为止,我已经完成了纸牌课程。卡类可以工作,但是当我去测试test3时的卡类时,应该捕获异常,因为“ X”不在值数组中,但由于某种原因,它无法捕获并显示X而不是错误消息“输入无效”。我想发生的是我的值集访问器应搜索String [] values数组,然后确定value参数是否有效,如果不是,则抛出新的异常。我不确定如何解决此问题。另外,我不能为值使用枚举,而需要使用values数组。
任何帮助,将不胜感激
这是我的卡片课程所需要的
class Card
{
public enum SUIT { HEARTS, SPADES, DIAMONDS, CLUBS };
private SUIT _suit;
private String _value;
public Card(SUIT suit, String value)
{
_suit = suit;
_value = value;
}
public SUIT Suit
{
get
{
//Return member variable value
return _suit;
}
set
{
_suit = value;
}
}
private String[] values = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
public String Value
{
get { return _value; }
set
{
if (!values.Contains(value))
{
throw new ArgumentException("Invalid Input");
}
_value = value;
}
}
}
这是我正在测试的代码
try
{
Card testCard1 = new Card(Card.SUIT.SPADES, "Q");
Console.WriteLine(testCard1.Suit + " " + testCard1.Value);
Card testCard2 = new Card(Card.SUIT.DIAMONDS, "10");
Console.WriteLine(testCard2.Suit + " " + testCard2.Value);
Card testCard3 = new Card(Card.SUIT.DIAMONDS, "X");
Console.WriteLine(testCard3.Suit + " " + testCard3.Value);
}
catch (ArgumentException e)
{
Console.WriteLine(e.Message);
}
Console.ReadLine();
您正在通过构造函数将错误的值分配给backingfield。这并不是一件坏事,但是它绕过了您的propertylogic。
public Card(SUIT suit, String value)
{
_suit = suit;
_value = value; // this assignes the value directly to the field, bypassing your property-logic.
}
像这样更改它,将是最简单的解决方案
public Card(SUIT suit, String value)
{
_suit = suit;
Value = value; // use the property here.
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句