在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
不应该在那里。
答案 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关键字会导致参数 通过引用传递。这是类似的 到ref关键字,除了ref 要求变量是 在通过之前初始化。至 使用out参数,这两种方法 定义和调用方法必须 明确使用out关键字。
虽然作为out参数传递的变量不需要初始化 在通过之前,呼叫 方法是分配值所必需的 在方法返回之前。
所以它应该没问题,除了你的方法语法不正确。您需要使用逗号而不是分号来分隔参数。
答案 3 :(得分:0)
根据您的实际代码,您无法定义mo,因为它已被定义为out参数