因此,当调用Console.Readline并将其分配给要由if语句计算的变量时,我想知道以下代码是否可以互换,如果不是,它们与点的不同之处我应该选择一个而不是另一个我的申请。
//code omitted
var answer = Console.ReadLine();
if (answer.GetType() == typeOf(string))
{
Console.WriteLine("Awesome");
}
// code omitted
基本上想知道是否使用了
if (answer is string) ...
是更好的选择吗?
答案 0 :(得分:5)
您编写的代码是无稽之谈,因为Console.ReadLine
总是返回string
(毕竟它是返回类型!)。
要回答您的问题,is
运算符不等同于GetType() == typeof()
语句。原因是如果对象可以转换为类型,is
将返回true。特别是,对于派生类型,它将返回true,这将使另一个检查失败。来自MSDN:
如果提供的表达式为非null,则is表达式的计算结果为true,并且可以将提供的对象强制转换为提供的类型,而不会引发异常。
请注意, 运算符仅考虑引用转化,装箱转换和拆箱转换。其他转换(例如用户定义的转化)不予考虑。
如果您正在寻找特定类型的输入(例如数字),那么您需要尝试Parse
或TryParse
进入该类型。类似的东西:
double output;
if (double.TryParse(answer, out output)
{
//Its a number!
}
else
{
//Its some regular string
}
虽然没有看到更多,但不可能说出你需要写什么。