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)
但我很好奇这两行之间的区别是什么,因为编译器似乎真的很在意.据我所知,这两条线做同样的事情.
问题是捕获块.编译器必须假设Int32.Parse代码可以抛出并因此命中你的catch块.如果发生这种情况,Int32.Parse行不会完成,因此测试永远不会赋值.这意味着"if"行试图使用未初始化的值.
你可以解决这个问题