c# - C# Visual Studio 错误使用未分配的局部变量
问题描述
我正在制作一个简单的程序,当单击按钮时,它会在标签中显示一张卡片
使用随机数生成器创建一个介于 1-4 之间的数字(并设置为红心、方块、梅花或黑桃)
还有另一个生成器,用于创建 1-13 之间的数字(然后设置为 ace、1、2、3、4、5、6、7、8、9、10、jack、queen、king)
然后使用 if 语句设置被调用的西装
然后使用 switch 语句将卡设置为各自的卡
但我收到一个错误:
尝试构建我的程序时出现错误 CS0165
这是我的程序:
这是我的代码:
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Random myRandom = new Random();
int suitNo, cardNo;
string suit, card;
suitNo = myRandom.Next(1, 4);
cardNo = myRandom.Next(1, 13);
if (suitNo == 1)
{
suit = "Hearts";
}
if (suitNo == 2)
{
suit = "Diamonds";
}
if (suitNo == 3)
{
suit = "Clubs";
}
if (suitNo == 4)
{
suit = "Spades";
}
switch (cardNo)
{
case 1:
card = "Ace";
break;
case 2:
card = "Two";
break;
case 3:
card = "Three";
break;
case 4:
card = "Four";
break;
case 5:
card = "Five";
break;
case 6:
card = "Six";
break;
case 7:
card = "Seven";
break;
case 8:
card = "Eight";
break;
case 9:
card = "Nine";
break;
case 10:
card = "Ten";
break;
case 11:
card = "Jack";
break;
case 12:
card = "Queen";
break;
case 13:
card = "King";
break;
}
label1.Text = "Your card is a " + card + " of " + suit;
}
关于为什么它给我一个错误的任何想法?
解决方案
您的switch
子句没有提供default
案例,因此编译器不能静态推断出一个值将始终分配给card
。尽管在实践中cardNo
会介于1
和之间13
,但如果不运行程序,则无法验证这一点。
当然也一样suit
。
suit
要么初始化子句和card
之前的值,switch
要么创建一个default
案例。
当您不期望除已编码的值之外的任何其他值时,一个好的做法是提供一种default
情况,在这种情况下您只需抛出异常或Debug.Assert(false)
.
一个更简单的结构是定义
private static readonly string[] suits = { "Hearts", "Diamonds", "Clubs", "Spades" };
private static readonly string[] cards = { "Ace", ... , "King" };
然后你的方法基本上可以简化为:
int suitNo = myRandom.Next(suits.Length);
int cardNo = myRandom.Next(cards.Length);
string suit = suits[suitNo];
string card = cards[cardNo];
并从冗长if
的 s 和switch
es 中解脱出来。
推荐阅读
- angular - Angular 8:无法通过服务发送授权
- php - 以最低的价格在综合体中获得法院
- jquery - JQuery .prop() 点击选中> false
- tfs - TFS 2010 升级到 TFS 2013 - Window Server 2019 Standard 是否支持升级?
- mysql - Pymysql 无法连接做 MySQL DB:挂在“self.sock.recv_into(b)”?
- javascript - 从 Salesforce sfcc 获取订单时出错
- react-native - 如何重定向回来并刷新父视图
- php - mysql查询的if/else条件
- c++ - 将 BYTE 数组转换为 LPCWSTR C++
- javascript - 导航栏无法显示