下面的代码在VS2010中给出了编译时错误:
Use of unassigned local variable 'error'
leveldb_memory error;
try
{
return leveldb_open(options, name, out error); // <== Notice `out error`
}
finally
{
Validate(error); // <== Use of unassigned local variable 'error'
}
这似乎不正确,有没有办法在不修改代码的情况下克服此错误?
修改
哦,这不是C#错误...... :(
答案 0 :(得分:12)
error
没有初始值。如果leveldb_open
在设置之前抛出异常,它仍然不会有。
因此,在不设置值的情况下使用error
会导致错误。
如果leveldb_memory
是可以为空的类型,您可以将其初始化为null
:
leveldb_memory error = null;
答案 1 :(得分:9)
不,leveldb_open
可能会抛出异常,导致error
无法设置。
答案 2 :(得分:1)
在您的代码中,永远不会为变量Error赋值。我不确定怎么回答这个问题?这肯定不是c#bug。
答案 3 :(得分:1)
leveldb_memory error = default( levelldb_memory );
try {
return leveldb_open( options, name, out error );
} finally {
Validate( error );
}
default
从类型创建对象而不在其上运行构造函数。
当您在try
块中执行某些操作时,不会对其后的内容产生影响,
因为代码可以捕获异常并且不会分配错误。
BTW它可以在空对象上调用Validate
。但default
部分是隐藏错误。
答案 4 :(得分:0)
您必须先初始化error
变量,然后才能将其传递给方法。
所以只需要error = null
,编译器就会很开心。
答案 5 :(得分:-1)
这不是C#错误( - :
虽然您使用允许函数分配给out error
的{{1}}没有人向您承诺,但内部有一项任务。因此你必须自己检查......