C#代码报错:'enemytype'未赋值与非空验证异常求助
修正C#未赋值变量错误及随机数范围问题
问题根源
random.Next(1, 3)是左闭右开区间,只会生成1或2,永远不会得到3,导致Samurai分支永远不会触发。- 局部变量
enemytype未初始化,且编译器检测到存在未赋值的代码路径(尽管实际不会发生),因此抛出未赋值变量的错误。
修正后的代码(if-else版本)
using static System.Console; Random random = new Random(); WriteLine("Welcome to the... DICE DOME! Your battle begins NOW! Press any key to roll the magical 3 sided dice to determine who you'll be fighting:"); ReadKey(); // 修正随机数范围:Next(1,4)生成1、2、3三个有效值 int enemy = random.Next(1, 4); string enemytype; if (enemy == 1) { enemytype = "Juggernaut"; } else if (enemy == 2) { enemytype = "Swiftster"; } else // 覆盖所有剩余情况(即enemy=3),确保变量必被赋值 { enemytype = "Samurai"; } WriteLine("====================================================================="); WriteLine($"You rolled a {enemy}, you will be battling {enemytype}!"); WriteLine("=====================================================================");
更简洁的switch表达式版本
using static System.Console; Random random = new Random(); WriteLine("Welcome to the... DICE DOME! Your battle begins NOW! Press any key to roll the magical 3 sided dice to determine who you'll be fighting:"); ReadKey(); int enemy = random.Next(1, 4); // 使用switch表达式直接赋值,确保所有情况都被覆盖 string enemytype = enemy switch { 1 => "Juggernaut", 2 => "Swiftster", _ => "Samurai" }; WriteLine("====================================================================="); WriteLine($"You rolled a {enemy}, you will be battling {enemytype}!"); WriteLine("=====================================================================");
关键修改点
- 调整随机数范围为
Next(1,4),确保能生成1、2、3三个目标值。 - 确保
enemytype在所有代码路径下都被赋值,消除编译器警告。 - 移除了未使用的冗余变量(
d6、d5、d4及三个未使用的字符串变量)。 - 使用字符串插值替代字符串拼接,提升代码可读性。
内容的提问来源于stack exchange,提问作者Liam
相关产品推荐
相关产品推荐

