GetType()== typeOf(string)或var是string ...?

时间:2014-06-20 23:16:11

标签: c#

因此,当调用Console.Readline并将其分配给要由if语句计算的变量时,我想知道以下代码是否可以互换,如果不是,它们与点的不同之处我应该选择一个而不是另一个我的申请。

//code omitted

var answer = Console.ReadLine();

if (answer.GetType() == typeOf(string))
{
Console.WriteLine("Awesome");
}
// code omitted

基本上想知道是否使用了

if (answer is string) ...

是更好的选择吗?

1 个答案:

答案 0 :(得分:5)

您编写的代码是无稽之谈,因为Console.ReadLine 总是返回string(毕竟它是返回类型!)。

要回答您的问题,is运算符不等同于GetType() == typeof()语句。原因是如果对象可以转换为类型,is将返回true。特别是,对于派生类型,它将返回true,这将使另一个检查失败。来自MSDN

  

如果提供的表达式为非null,则is表达式的计算结果为true,并且可以将提供的对象强制转换为提供的类型,而不会引发异常。

     

请注意, 运算符仅考虑引用转化,装箱转换和拆箱转换。其他转换(例如用户定义的转化)不予考虑。

如果您正在寻找特定类型的输入(例如数字),那么您需要尝试ParseTryParse进入该类型。类似的东西:

double output;
if (double.TryParse(answer, out output)
{
   //Its a number!
}
else
{
   //Its some regular string
}

虽然没有看到更多,但不可能说出你需要写什么。