当对象不为null时,Visual Studio 2015调试器显示null

时间:2016-05-24 10:35:55

标签: c# visual-studio-2015 visual-studio-debugging

如果我运行以下(当然是人为的)程序(VS2015,.NET4.6):

class Program
{
    static void Main(string[] args)
    {
        TestTaskAsync(null).Wait();
        TestTask(null);
    }

    public static async Task TestTaskAsync(
        EqualityComparer<int> comparer)
    {
        comparer = EqualityComparer<int>.Default;

        if (comparer == null)
        {
            Console.WriteLine("comparer is null");
        }

        Func<int, bool> func = i => comparer.Equals(i, 0);
    }

    public static Task TestTask(
        EqualityComparer<int> comparer)
    {
        comparer = EqualityComparer<int>.Default;

        if (comparer == null)
        {
            Console.WriteLine("comparer is null");
        }

        Func<int, bool> func = i => comparer.Equals(i, 0);

        return Task.CompletedTask;
    }
}

然后程序完全按照我的预期进行 - 即它不会向控制台打印任何内容。

但是,在调试时,调试器告诉我comparer在没有调试时为空。

enter image description here

请注意以下事项:

  • 代码未输入if块。
  • 两个调试值(固定和观察窗口中)告诉我 comparer为空,即使它没有输入if块。
  • 波浪线和灰色代码告诉我这个 comparer == null 永远不会成真。我认为这是正确的。
  • 这仅在标记为async
  • 的方法中发生

最后,如果我删除该行

Func<int, bool> func = i => comparer.Equals(i, 0);

然后问题就消失了。

(注意:上述程序的目的是说明我在代码中实际执行某些操作的问题。实际上,该程序实际上不会做任何事情。)

问题: 有谁知道这里发生了什么?

0 个答案:

没有答案