我正在尝试编写一个控制台应用程序,它使用多种类型的骰子进行dicerolls,并在完成后,要求用户确认新的滚动或退出。
以下是显示问题的最小部分:
string rolltype = "bob";
if (rolltype = "d4") // <-- error on this line
{
Console.WriteLine("d4 roll is {0}", d4);
}
代码在编译时产生以下错误:
无法将类型字符串隐式转换为bool
完整来源:
namespace diceroll
{
class Program
{
static void Main(string[] args)
{
Random rand = new Random();
int d4 = rand.Next(1, 5);
int d6 = rand.Next(1, 7);
int d8 = rand.Next(1, 9);
int d10 = rand.Next(1, 11);
int d12 = rand.Next(1, 13);
int d20 = rand.Next(1, 21);
string rolltype;
Console.WriteLine("what do you want to roll?");
rolltype = (Console.ReadLine());
Console.WriteLine("your choice is {0}", rolltype);
if (rolltype = "d4")
{
Console.WriteLine("d4 roll is {0}", d4);
}
else { }
Console.ReadKey();
}
}
}
我希望在这里实现的是控制台询问滚动的类型,并且在给出时,它会返回一个随机数。 (rolltype =“d4”)返回错误“无法将类型字符串隐式转换为bool”。
答案 0 :(得分:2)
“不能隐式将类型字符串转换为bool”,我不知道 如何解决它
这是因为下面的代码不会产生布尔值,低于你试图将rolltype
分配给字符串"d4"
因此错误。
if (rolltype = "d4")
你想要的是这个:
if (rolltype == "d4")
还有一种比写作更优雅的方式 为rolltypes分隔if语句?
当然,我们可以使用数组存储可能的选项,然后循环遍历它。
第1步 - 创建数组:
string[] myArray = {"d4","d6","d8","d10","d12","d20"};
现在你的代码变成了这样:
Random rand = new Random();
int d4 = rand.Next(1, 5);
int d6 = rand.Next(1, 7);
int d8 = rand.Next(1, 9);
int d10 = rand.Next(1, 11);
int d12 = rand.Next(1, 13);
int d20 = rand.Next(1, 21);
string[] myArray = {"d4","d6","d8","d10","d12","d20"};
步骤2 - 循环遍历它以查找输入的值是否等于数组中的任何值。
foreach(string str in myArray){
if (rolltype == str){
// do something
break; // if we get here then we don't need to loop any further
}
}
现在你的代码变成了这样:
Random rand = new Random();
int d4 = rand.Next(1, 5);
int d6 = rand.Next(1, 7);
int d8 = rand.Next(1, 9);
int d10 = rand.Next(1, 11);
int d12 = rand.Next(1, 13);
int d20 = rand.Next(1, 21);
string[] myArray = {"d4","d6","d8","d10","d12","d20"};
string rolltype;
Console.WriteLine("what do you want to roll?");
rolltype = (Console.ReadLine());
Console.WriteLine("your choice is {0}", rolltype);
foreach(string str in myArray){
if (rolltype == str){
// do something
break; // if we get here then we don't need to loop any further
}
}
评论中Chris建议的另一个好方法是简单地从字符串中取出数字。这显然会减少您目前拥有的rand.Next()
数量。
示例:强>
int dieType = int.Parse(rollType.Substring(1));
int result = rand.Next(1,dieType+1);
答案 1 :(得分:0)
if (rolltype == "d4")
您需要使用相等运算符而不是赋值运算符。