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

时间:2010-08-11 03:45:01

标签: c# out-parameters

在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);
编辑:我现在可以看到我的错误了。我已将上述代码更改为我的代码。星号中的MyObject不应该在那里。

4 个答案:

答案 0 :(得分:4)

您发布的原始代码不正确,但现在我们发现问题实际存在于此处:

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

您正在创建一个新的本地变量mo,它“隐藏”参数mo

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

答案 1 :(得分:2)

此错误消息表示在同一方法中某处有另一个名为mo的变量。例如,此类代码会导致此错误:

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

MyObject mo;

您可能认为它不相关,因此您没有发布整个代码。

答案 2 :(得分:1)

来自文档

out (C# Reference)

  

out关键字会导致参数   通过引用传递。这是类似的   到ref关键字,除了ref   要求变量是   在通过之前初始化。至   使用out参数,这两种方法   定义和调用方法必须   明确使用out关键字。

     

虽然作为out参数传递的变量不需要初始化   在通过之前,呼叫   方法是分配值所必需的   在方法返回之前。

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

答案 3 :(得分:0)

根据您的实际代码,您无法定义mo,因为它已被定义为out参数