c# - 在 C# 中使用 out 关键字

标签 c# .net keyword out

任何人都可以建议我将 out 关键字作为参数的确切用法,以及它如何连接以从函数返回多个值,如 POST 中所示,我对 out 变量和普通变量感到困惑。谁能帮我解决这个问题。

最佳答案

这经常令人困惑,而且我认为 MSDN 文档实际上有点“只有已知才能清楚”。也就是说,它是正确的,但只有您已经理解了这个概念,它才真正有意义。

这是我的想法。

常规参数对参数 进行复制。当你说:

static int M(int z) { z = z + 1; return z; }    
...
int x = 123;
int y = M(x);

正如你所说:

int x = 123;
int z = x; // make a copy of x
z = z + 1;
int y = z;

一个 ref 或 out 参数为现有变量创建别名。当你说

static void N(ref int q) { q = q + 1; }    
...
int x = 123;
N(x);

这等同于说:

int x = 123;
// MAGIC: q is now an another name for variable x
q = q + 1;

qx两个不同的名称,它们指的是相同的变量。递增 q 也会递增 x,因为它们是相同的。上例中的 zx两个不同的名称,分别引用两个不同的变量。增加 z 不会改变 x

总结:“out”和“ref”只是表示“不要创建新变量;而是暂时为现有变量创建第二个名称”。

现在清楚了吗?

更新:我没有说明“out”和“ref”之间的区别。区别很简单。在“调用者”方面,“ref”必须是在方法被调用之前明确分配的变量。不需要“出局”。在“callee”端,“ref”可以在写入之前被读取,但“out”必须在读取之前被写入。此外,在控件正常离开该方法之前,必须写入“out”。

关于c# - 在 C# 中使用 out 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7716641/

相关文章:

c# - 如何使用 RefIdStr 和 RavenDB 扩展 ServiceStack UserAuth

types - F#等同于C#中的is关键字?

c# - 打开项目时找不到 Microsoft.CompactFramework.CSharp.targets

c# - 为什么 type.Assembly.GetType(type.Name) 返回 null?

.net - 在 visual studio 扩展中放置菜单选项

asp.net - 使用 SQL Server 进行关键字搜索

python - SQLAlchemy : Table primary_key - unexpected keyword argument error

c# - 无法验证 UseJwtBearerAuthentication 中的 token 。授权被拒绝

c# - FormView EditTemplate 如何更新 ObjectDataSource UpdateParameters 中的值?

c# - ODP.NET 连接池参数