为什么以下条件运算符“?:”会编译却给出运行时错误

我的

我无法弄清楚为什么以下程序在没有警告的情况下进行编译,但是在异常块中,条件运算符给出了NullReferenceException。

using System;

namespace Playground
{
    class Program
    {
        static void Main(string[] args)
        {
            string message1 = "First message.";
            string message2 = null;
            // This works without a problem
            Console.WriteLine(message1 + message2 == null ? "" : Environment.NewLine + message2);
            Console.ReadKey();

            try
            {
                throw new Exception("Now with an exception.");
            }
            catch (Exception ex)
            {
                // This will give a NullReferenceException:
                Console.WriteLine(ex.Message + ex.InnerException == null ? "" : Environment.NewLine + ex.InnerException.Message);
                // ..But this will work:
                Console.WriteLine(ex.Message + (ex.InnerException == null ? "" : Environment.NewLine + ex.InnerException.Message));
            }
        }
    }
}

我知道??运算符,我的问题是为什么异常处理程序的第一行给出NullReferenceException。

背风处
ex.Message + ex.InnerException

转换成

string.Concat(ex.Message, ex.InnerException);

这会检查其参数是否为null,如果不存在,则仅将其转换为字符串。这意味着

ex.Message + ex.InnerException == null

false这样的表达

Environment.NewLine + ex.InnerException.Message

被评估。由于ex.InnerException为null,因此将引发异常

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在枚举上重载<<运算符会给出运行时错误

来自分类Dev

为什么此代码编译并在执行时给出运行时错误

来自分类Dev

performSegueWithIdentifier给出运行时错误,为什么?

来自分类Dev

为什么我的代码给出运行时错误?

来自分类Dev

为什么这会给出运行时浮点错误?

来自分类Dev

为什么这会给出运行时浮点错误?

来自分类Dev

为什么以下golang程序会抛出运行时内存不足错误?

来自分类Dev

cout给出运行时错误

来自分类Dev

为什么格式错误的XAML似乎会编译,然后在运行时失败?

来自分类Dev

va_arg给出运行时错误

来自分类Dev

flask sqlalchemy filter_by给出运行时错误

来自分类Dev

在android中给出运行时短信权限错误

来自分类Dev

在线判断给出运行时错误(NZEC)

来自分类Dev

为什么VC ++编译器在复合运算符重载时给出错误?

来自分类Dev

以下代码在 ideone 中给出运行时错误,但在 eclipse 和 bash 终端中运行良好

来自分类Dev

有日期时间的条件运算符?不会编译

来自分类Dev

为什么这个sizeof运算符给出错误?

来自分类Dev

为什么我的输出运算符<<()函数定义导致未解决的外部符号错误?

来自分类Dev

当我尝试从HashSet中删除不存在的元素时,为什么它没有给出运行时错误?

来自分类Dev

当我尝试从不存在的HashSet中删除元素时,为什么它没有给出运行时错误?

来自分类Dev

为什么会出现这种使用泛型不会抛出运行时或编译时的异常?

来自分类Dev

访问:SQL更新查询中的运行时错误3075(缺少运算符)

来自分类Dev

在枚举上重载<<运算符会导致运行时错误

来自分类Dev

为什么从未执行过的Swift 3代码会抛出运行时错误?

来自分类Dev

为什么VB6 FlexGrid抛出运行时错误381'下标超出范围'?

来自分类Dev

为什么从未执行过的Swift 3代码会抛出运行时错误?

来自分类Dev

Python-在运行时使用运算符

来自分类Dev

C ++中的运行时运算符

来自分类Dev

Python-在运行时使用运算符

Related 相关文章

  1. 1

    在枚举上重载<<运算符会给出运行时错误

  2. 2

    为什么此代码编译并在执行时给出运行时错误

  3. 3

    performSegueWithIdentifier给出运行时错误,为什么?

  4. 4

    为什么我的代码给出运行时错误?

  5. 5

    为什么这会给出运行时浮点错误?

  6. 6

    为什么这会给出运行时浮点错误?

  7. 7

    为什么以下golang程序会抛出运行时内存不足错误?

  8. 8

    cout给出运行时错误

  9. 9

    为什么格式错误的XAML似乎会编译,然后在运行时失败?

  10. 10

    va_arg给出运行时错误

  11. 11

    flask sqlalchemy filter_by给出运行时错误

  12. 12

    在android中给出运行时短信权限错误

  13. 13

    在线判断给出运行时错误(NZEC)

  14. 14

    为什么VC ++编译器在复合运算符重载时给出错误?

  15. 15

    以下代码在 ideone 中给出运行时错误,但在 eclipse 和 bash 终端中运行良好

  16. 16

    有日期时间的条件运算符?不会编译

  17. 17

    为什么这个sizeof运算符给出错误?

  18. 18

    为什么我的输出运算符<<()函数定义导致未解决的外部符号错误?

  19. 19

    当我尝试从HashSet中删除不存在的元素时,为什么它没有给出运行时错误?

  20. 20

    当我尝试从不存在的HashSet中删除元素时,为什么它没有给出运行时错误?

  21. 21

    为什么会出现这种使用泛型不会抛出运行时或编译时的异常?

  22. 22

    访问:SQL更新查询中的运行时错误3075(缺少运算符)

  23. 23

    在枚举上重载<<运算符会导致运行时错误

  24. 24

    为什么从未执行过的Swift 3代码会抛出运行时错误?

  25. 25

    为什么VB6 FlexGrid抛出运行时错误381'下标超出范围'?

  26. 26

    为什么从未执行过的Swift 3代码会抛出运行时错误?

  27. 27

    Python-在运行时使用运算符

  28. 28

    C ++中的运行时运算符

  29. 29

    Python-在运行时使用运算符

热门标签

归档