3

以下代码在 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# 错误... :(

4

6 回答 6

12

error没有初始值。leveldb_open如果在设置之前抛出异常,它仍然不会有。

因此,error在不为其设置值的情况下使用可能会导致错误。

如果leveldb_memory是可空类型,您可以将其初始化为null

leveldb_memory error = null;
于 2012-07-29T14:25:09.820 回答
9

不,leveldb_open可能会引发导致error无法设置的异常。

于 2012-07-29T14:25:09.250 回答
1
leveldb_memory error = default( levelldb_memory );
try {
    return leveldb_open( options, name, out error );
} finally {
    Validate( error );
}

default从类型创建对象而不在其构造函数上运行。当您在try块中执行某些不会影响其后的操作时,因为代码可以捕获异常并且不分配错误。

顺便说一句,它可以调用Validate空对象。但default部分是隐藏错误。

于 2012-07-29T14:29:59.773 回答
1

在您的代码中,变量 Error 永远不会被赋值。我不知道还能如何回答这个问题?这肯定不是 ac# 错误。

于 2012-07-29T14:24:41.933 回答
0

您必须先初始化error变量,然后才能将其传递给方法。

所以只要这样做error = null,编译器就会很高兴。

于 2012-07-29T15:20:22.607 回答
-1

这不是 C# 错误(-:
虽然你使用out errorwhich 允许函数分配给error任何人,但没有人保证你里面有一个赋值。因此你必须自己检查它......

于 2012-07-29T14:27:56.963 回答