C# GetType()==typeOf(字符串)或var是字符串。。。?

C# GetType()==typeOf(字符串)或var是字符串。。。?,c#,C#,因此,当调用Console.Readline并将其分配给一个由if语句计算的变量时,我想知道下面的代码是否可以互换,如果不能互换,它们与我应该为应用程序选择的代码有什么不同 //code omitted var answer = Console.ReadLine(); if (answer.GetType() == typeOf(string)) { Console.WriteLine("Awesome"); } // code omitted 我只是想知道是否要用它 if (answer

因此,当调用Console.Readline并将其分配给一个由if语句计算的变量时,我想知道下面的代码是否可以互换,如果不能互换,它们与我应该为应用程序选择的代码有什么不同

//code omitted

var answer = Console.ReadLine();

if (answer.GetType() == typeOf(string))
{
Console.WriteLine("Awesome");
}
// code omitted
我只是想知道是否要用它

if (answer is string) ...

是更好的选择吗?

您编写的代码毫无意义,因为
Console.ReadLine
总是返回
字符串(毕竟是它的返回类型!)

为了回答您的问题,
is
运算符与
GetType()==typeof()
语句不等价。原因是如果可以将对象强制转换为该类型,
is
将返回true。特别是,对于派生类型,它将返回true,这将导致其他检查失败。发件人:

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

请注意,is运算符只考虑引用转换、装箱转换和取消装箱转换。不考虑其他转换,例如用户定义的转换

如果您正在寻找特定类型的输入(比如数字),那么您需要尝试将其解析为该类型。比如:

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

如果看不到更多内容,就不可能确切地说出您需要编写什么。

您编写的代码毫无意义,因为
Console.ReadLine
总是返回
字符串(毕竟这是它的返回类型!)

为了回答您的问题,
is
运算符与
GetType()==typeof()
语句不等价。原因是如果可以将对象强制转换为该类型,
is
将返回true。特别是,对于派生类型,它将返回true,这将导致其他检查失败。发件人:

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

请注意,is运算符只考虑引用转换、装箱转换和取消装箱转换。不考虑其他转换,例如用户定义的转换

如果您正在寻找特定类型的输入(比如数字),那么您需要尝试将其解析为该类型。比如:

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


如果看不到更多内容,就不可能确切说出您需要写什么。

为什么要检查字符串是否为字符串?如果使用
if(true)
:)
Console.ReadLine()
总是返回一个字符串,那么使用
会更有效。我建议阅读
var
关键字:我已经够过时了,仍然拒绝使用“var”@BradleyDotNET如果它不是其他的复制品,比如为什么要检查string是否为string,这将是一个很好的问题?如果使用
if(true)
:)
Console.ReadLine()
总是返回一个字符串,那么使用
会更有效。我建议阅读
var
关键字:我已经够过时了,仍然拒绝使用“var”@BradleyDotNET如果它不是像我刚才添加的评论那样的复制品,那将是一个好问题。然后删除它,因为
字符串
特别是
是密封的
所以…)@Jon,编写
is string
显然是不常见的,但是测试之间的区别更一般,需要注意。我真的很喜欢你的评论(在我发布我的答案:)如果对象可以转换为不准确的类型,“
is
将返回true”。您可以将
int
强制转换为
double
,但是
42是double
false
@svick-好的观点。MSDN涵盖了
is
考虑的转换列表,以澄清它。@BradleyDotNET-我在MSDN中又添加了一句话,澄清了
is
的“cast”含义,以供svick评论。请随意编辑/还原。我刚刚添加了一条注释。然后删除它,因为
字符串
特别是
是密封的
所以…)@Jon,编写
is string
显然是不常见的,但是测试之间的区别更一般,需要注意。我真的很喜欢你的评论(在我发布我的答案:)如果对象可以转换为不准确的类型,“
is
将返回true”。您可以将
int
强制转换为
double
,但是
42是double
false
@svick-好的观点。MSDN涵盖了
is
考虑的转换列表,以澄清它。@BradleyDotNET-我在MSDN中又添加了一句话,澄清了
is
的“cast”含义,以供svick评论。请随意编辑/还原。