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) ...
是更好的选择?
你写的代码是无意义的,因为Console.ReadLine
总是返回string
(毕竟它是它的返回类型!)
回答你的问题,is
运算符不等同于GetType() == typeof()
语句。原因是,如果对象可以被强制转换为该类型,is
将返回true。特别是,对于派生类型,它将返回true,这将使其他检查失败。从MSDN:
如果提供的表达式为非空,则is表达式的计算结果为true,并且可以将提供的对象强制转换为提供的类型,而不会引发异常。
注意,is操作符只考虑引用转换、装箱转换和拆箱转换。其他转换,如用户定义的转换,则不考虑。
如果你正在寻找一个特定类型的输入(比如一个数字),那么你需要尝试和Parse
或TryParse
到该类型。比如:
double output;
if (double.TryParse(answer, out output)
{
//Its a number!
}
else
{
//Its some regular string
}