3

在 C# 中,为什么我不能在out参数中传递未分配的对象变量然后分配它?

如果我尝试这样做,则会出现编译器错误: “无法在此范围内声明局部变量,因为它会给...赋予不同的含义”<xyz><xyz>

例如。

void MyMethod(int x, out MyObject mo) {  **MyObject** mo = new MyObject(); }
// in some other scope:
MyObject mo;
MyMethod(1, out mo);

编辑:我现在可以看到我的错误了。我已将上面的代码更改为我的代码。MyObjectin 星号不应该在那里。

4

4 回答 4

4

您发布的原始代码不正确,但现在我们看到问题实际上出在:

void MyMethod(int x, out MyObject mo)
{
    MyObject mo = new MyObject();
    // should be:
    // mo = new MyObject();
}

您正在创建一个mo“隐藏”参数的新局部变量mo

很高兴我们最终到达了那里:-)

于 2010-08-11T04:05:52.597 回答
2

此错误消息意味着mo在同一方法中的某处命名了另一个变量。例如,这样的代码会导致这个错误:

for( int mo = 0; i < 5; i++ ) Console.WriteLine( mo );

MyObject mo;

你可能不认为它是相关的,所以你没有发布整个代码。

于 2010-08-11T03:53:41.833 回答
1

从文档

出(C# 参考)

out 关键字导致参数通过引用传递。这类似于 ref 关键字,不同之处在于 ref 要求变量在传递之前进行初始化。要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。

尽管作为输出参数传递的变量在传递之前不需要初始化,但调用方法需要在方法返回之前分配一个值。

所以应该没问题,只是你的方法语法不正确。您需要使用逗号而不是分号来分隔参数。

于 2010-08-11T03:50:49.517 回答
0

给定您的实际代码,您无法定义 mo 因为它已经定义为 out 参数

于 2010-08-11T04:01:53.717 回答