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

发布于 2024-09-13 23:54:11 字数 429 浏览 8 评论 0原文

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

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

例如。

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

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

In C#, why can't I pass an unassigned object variable in an out parameter and then assign it?

If I try to do this, there is a compiler error: "Local variable <xyz> cannot be declared in this scope because it would give a different meaning to <xyz>..."

eg.

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

EDIT: I can see my mistake now. I have changed the above code to what mine was. The MyObject in asterisks should not be there.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

∞觅青森が 2024-09-20 23:54:11

您最初发布的代码不正确,但现在我们看到问题实际上就在这里:

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

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

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

The code you posted original was incorrect, but now we see that the problem is actually here:

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

You're creating a new local variable mo which "hides" the parameter mo.

Glad we got there in the end :-)

疧_╮線 2024-09-20 23:54:11

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

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

MyObject mo;

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

This error message means that there is another variable named mo somewhere in the same method. For example, such code would cause this error:

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

MyObject mo;

You probably didn't think it was related, so you didn't post the whole code.

无言温柔 2024-09-20 23:54:11

从文档

out(C# 参考)

out 关键字导致参数成为
通过引用传递。这很相似
到 ref 关键字,除了 ref
要求变量是
在传递之前初始化。到
使用 out 参数,这两种方法
定义和调用方法必须
显式使用 out 关键字。

虽然作为输出参数传递的变量不需要初始化
在通过之前,调用
需要方法来赋值
在方法返回之前。

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

From the documentation

out (C# Reference)

The out keyword causes arguments to be
passed by reference. This is similar
to the ref keyword, except that ref
requires that the variable be
initialized before being passed. To
use an out parameter, both the method
definition and the calling method must
explicitly use the out keyword.

Although variables passed as an out arguments need not be initialized
prior to being passed, the calling
method is required to assign a value
before the method returns.

So it should be fine, except that your method syntax is incorrect. You need to use a comma instead of a semi colon to seperate parameters.

我的奇迹 2024-09-20 23:54:11

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

Given your actual code, you cannot define mo because it's already defined as an out parameter

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文