GetType() == typeOf(string) or var is string ...?

本文关键字:string is var typeOf GetType or | 更新日期: 2023-09-27 18:09:32

当调用Console时。我想知道下面的代码是否可以互换,如果不能,它们有什么不同,我应该为我的应用程序选择一个。

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

只是想知道如果用

if (answer is string) ...

是更好的选择?

GetType() == typeOf(string) or var is string ...?

你写的代码是无意义的,因为Console.ReadLine 总是返回string(毕竟它是它的返回类型!)

回答你的问题,is运算符不等同于GetType() == typeof()语句。原因是,如果对象可以被强制转换为该类型,is将返回true。特别是,对于派生类型,它将返回true,这将使其他检查失败。从MSDN:

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

注意,is操作符只考虑引用转换、装箱转换和拆箱转换。其他转换,如用户定义的转换,则不考虑。

如果你正在寻找一个特定类型的输入(比如一个数字),那么你需要尝试和ParseTryParse到该类型。比如:

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