2011-06-22 47 views
2

它是一种简单的问题,但我有疑问,请参阅初级讲座为什么不抛出异常

public static String something; 
    static void Main(string[] args) 
    { 
     try 
     { 
      if (something == "blah") 
       System.Console.Write("ok"); 
     } 
     catch (Exception) 
     { 

      throw; 
     } 

    } 

的代码,我知道这并不抛出异常,但为什么呢?因为变量的名称是空的,当你比较的时候你试图用null来获取引用。有人可以向我解释为什么?谢谢!

回答

2

变量,东西,不需要为这种比较的实例。它知道如何将其自身与空比较。

是因为

空==“字符串”

是返回false有效的比较不抛出异常。

24

这里没什么不对,因为你不是试图取消引用something。您将获得,即null。如果您尝试取消引用它(即something.somemethod()),则会引发异常。

0

您可以将null与一个字符串进行比较 - 结果是它们不相等。在这种情况下,有些东西是空的 - 你不需要“取消引用”来在比较中使用它,空值本身起作用。

0

由于一些变量为空,那么相对于一个字符串值等于说

if(null == "blah")... 

显然空,“嗒嗒”是不一样的,所以它会返回false,它赢得了”抛出异常。

0

字符串是可以为空的类型。

所以你在给定的代码您比较NULL字符串包含字符“嗒嗒”的字符串,你有没有else语句。

当然,当你试图比较一个字符串是错误的,我会争论使用==。

技术上“狗玩球的男孩\ n”和“狗玩球的男孩 \ 0”不等同于真正的使用==比较的时候。

3

这是由编译器生成的IL代码:

 
IL_0002: ldsfld  string ConsoleApplication1.Program::something 
IL_0007: ldstr  "blah" 
IL_000c: call  bool [mscorlib]System.String::op_Equality(string, string) 

String.op_Equality方法:

公共静态布尔运算符==(字符串,字符串B)

一个 - 一个字符串或空引用

b - 字符串或空引用

op_Equality允许传递空引用,并且不会抛出异常。

相关问题