C# GetType()==typeOf(字符串)或var是字符串。。。?
因此,当调用Console.Readline并将其分配给一个由if语句计算的变量时,我想知道下面的代码是否可以互换,如果不能互换,它们与我应该为应用程序选择的代码有什么不同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
//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评论。请随意编辑/还原。