C#初始化混乱!

Mei*_*ude 0 c# syntax null

int?  test;
try
{
    test = (int?) Int32.Parse ("7");
} catch {}

if (test == null)
     Console.WriteLine("test is null!");
else
     Console.WriteLine("test = {0}", test);
Run Code Online (Sandbox Code Playgroud)

我有一些代码可以做一些与此类似的东西,同样的想法真的...创建变量,尝试初始化它,然后测试初始化​​是否成功.

Visual Studios给我一个错误,说"使用未分配的局部变量'test'",这有点烦人,可以通过将第一行设置为:

int?  test = null;
Run Code Online (Sandbox Code Playgroud)

但我很好奇这两行之间的区别是什么,因为编译器似乎真的很在意.据我所知,这两条线做同样的事情.

Jar*_*Par 5

问题是捕获块.编译器必须假设Int32.Parse代码可以抛出并因此命中你的catch块.如果发生这种情况,Int32.Parse行不会完成,因此测试永远不会赋值.这意味着"if"行试图使用未初始化的值.

你可以解决这个问题

  1. 在catch块中为测试值分配测试
  2. 在方法开始时将其初始化为null