C# 函数调用的Out参数应保持初始化值

C# 函数调用的Out参数应保持初始化值,c#,out,ref,C#,Out,Ref,我已经定义了一个函数,其中一个参数是out。在这里,当进行函数调用时,我传递一个已初始化或未初始化的参数。 现在,在初始化参数的情况下,如何使被调用方不更改out参数的值 我不能在这里使用ref,因为有时我会发送未初始化的参数。 例: 在这里,我不希望控件转到fun2时x失去值3。From 虽然作为参数传递的变量在传递之前不必进行初始化,但是在方法返回之前,调用的方法需要分配一个值 由于必须使用out为参数指定一个值,因此无法在函数中保存该值。最好在调用函数之前复制变量。比如: int x =

我已经定义了一个函数,其中一个参数是out。在这里,当进行函数调用时,我传递一个已初始化或未初始化的参数。 现在,在初始化参数的情况下,如何使被调用方不更改out参数的值

我不能在这里使用ref,因为有时我会发送未初始化的参数。 例:

在这里,我不希望控件转到fun2时x失去值3。

From

虽然作为参数传递的变量在传递之前不必进行初始化,但是在方法返回之前,调用的方法需要分配一个值

由于必须使用
out
为参数指定一个值,因此无法在函数中保存该值。最好在调用函数之前复制变量。比如:

int x = 1;
int backupX = x;
fun2(out x);

虽然作为参数传递的变量在传递之前不必进行初始化,但是在方法返回之前,调用的方法需要分配一个值

由于必须使用
out
为参数指定一个值,因此无法在函数中保存该值。最好在调用函数之前复制变量。比如:

int x = 1;
int backupX = x;
fun2(out x);

也许我完全错了,但听起来你只是想定义一个这样的方法

void caller(){
int x=5;
int y = doSomething(x);
}

int doSomething(int x){
 return x+1;
}
或者,如果需要空状态,请使用:

void caller(){
int? x=5;
int y = doSomething(x);
}

int doSomething(int? x){
 if (x == null)
    return x;
 return x+1;
}

也许我完全错了,但听起来你只是想定义一个这样的方法

void caller(){
int x=5;
int y = doSomething(x);
}

int doSomething(int x){
 return x+1;
}
或者,如果需要空状态,请使用:

void caller(){
int? x=5;
int y = doSomething(x);
}

int doSomething(int? x){
 if (x == null)
    return x;
 return x+1;
}


如果你用一些代码来展示你在做什么,它将帮助我们形象化地了解如何帮助你。要理解你试图实现的目标有点困难。“out”表示初始化(和值)是被调用方法的责任。您要求的是完全相反的结果。在上面的示例中,我只想确保如果out参数在fun2调用之前已经在fun1中初始化,它应该保持该值不变,否则它可以在fun2中初始化参数。但是,由于它是out,fun2必须为参数指定一个值,因为在第一次调用中,值3丢失。\n出于好奇,您知道int总是初始化为0吗?如果您输入一些代码来显示您正在做什么,它将帮助我们直观地了解如何帮助您。理解您试图实现的目标有点困难。“out”表示初始化(和值)是被调用方法的责任。您要求的是完全相反的结果。在上面的示例中,我只想确保如果out参数在fun2调用之前已经在fun1中初始化,它应该保持该值不变,否则它可以在fun2中初始化参数。但是,由于它是out,fun2必须为参数指定一个值,因为在第一次调用中,值3丢失。\n只是出于好奇,您知道int总是初始化为0吗?听起来不错。谢谢这就引出了我的下一个问题。ref和ref的区别是什么?“出去!”泰勒杜登,看这个问题。它有非常详细的答案,请看这个问题:我之前确实看到过这个问题,但它没有解释可为null的ref和out@TylerDurden,你说可以为空是什么意思<代码>可空或未初始化的
int
?我的意思是可空。未初始化的int不存在,因为默认情况下它是0,对吗?听起来不错。谢谢这就引出了我的下一个问题。ref和ref的区别是什么?“出去!”泰勒杜登,看这个问题。它有非常详细的答案,请看这个问题:我之前确实看到过这个问题,但它没有解释可为null的ref和out@TylerDurden,你说可以为空是什么意思<代码>可空或未初始化的
int
?我的意思是可空。Uninitialized int不存在,因为默认情况下它是0 right?只有当有一个参数时才可以。如果还有更多呢?这就是为什么我要使用ref/out,并将函数返回类型设置为voiddefine类,并在这种情况下使用对象。只有当有一个参数时,这才可以。如果还有更多呢?这就是为什么我使用ref/out并将函数返回类型设置为voiddefine类,并在这种情况下使用对象