我正在尝试为团队制作概念验证命令行软件,但是我的代码有些不对劲。编译器对待代码的方式就好像我要隐式地将字符串转换为bool值一样,但是在这里我根本不使用任何布尔值,而且我绝不试图将任何东西都转换为一个布尔值。以下代码段可用于重现该问题:
namespace default {
class test {
static void Main() {
Console.Clear();
string IsDemoMode;
Console.WriteLine("Activate Demo Mode? (Y/N)");
IsDemoMode = Console.ReadLine();
if (string IsDemoMode = "Y")
{
// Demo code...
} else
{
// Non-Demo Code...
};
}
}
}
这里的问题是:为什么Visual Studio认为我什至在不打算将字符串转换为布尔值的时候?编译器是否期望布尔值而不是字符串?
答案 0 :(得分:3)
您使用的是=而不是==。因此,字符串 = “某些文本”将为您提供字符串。字符串 == “一些文本”将为您提供 bool
namespace default {
class test {
static void Main() {
Console.Clear();
string IsDemoMode;
Console.WriteLine("Activate Demo Mode? (Y/N)");
IsDemoMode = Console.ReadLine();
if (IsDemoMode == "Y")
{
// Demo code...
} else
{
// Non-Demo Code...
};
}
}
}
UPD。在这种情况下,建议使用等于。因此,您可以忽略大小写,等等。
namespace default {
class test {
static void Main() {
Console.Clear();
string IsDemoMode;
Console.WriteLine("Activate Demo Mode? (Y/N)");
IsDemoMode = Console.ReadLine();
if (IsDemoMode.Equals("Y", StringComparison.InvariantCultureIgnoreCase))
{
// Demo code...
} else
{
// Non-Demo Code...
};
}
}
}
答案 1 :(得分:0)
您应该在if中使用==而不是=
if (IsDemoMode == "Y")
{
//Demo mode
}
答案 2 :(得分:0)
将代码更改为
if(IsDemoMode.ToLower() == "y")
{
// Demo code...
}
else
{
// Non-Demo Code...
}