.net变量值可能在方法调用上改变
本文关键字:调用 改变 方法 变量值 net | 更新日期: 2023-09-27 18:05:46
大家好
我想知道如果我有bool x = true;
,我调用一个方法之后,可能会改变x
值。如果方法是void,这个改变会适用吗?不返回结果。
示例:
bool x = true;
string x = "";
Change_value(x);
if (!(x))
x = "Ok";
当我调用我的方法时, x值会改变吗?或者我需要做x = change_value(x)
这取决于您传递给方法的变量的类型。在您的示例中,no.
值类型不会在调用作用域中看到反映的更改,而引用值上的属性会。
这个答案很好地解释了这个概念
注意,您可以使用ref
关键字来更新值类型,就像更新引用类型一样。
可以更改引用值的成员,但不能重新赋值他们。
namespace ConsoleApplication1
{
public class TestObj
{
public string Val { get; set; }
}
class Program
{
static void Main(string[] args)
{
var testObj = new TestObj { Val = "Initial instance" };
Console.WriteLine(testObj.Val);
AssignNewInstance(testObj);
Console.WriteLine(testObj.Val);
// Prints:
// 'Initial instance'
// 'Changed in AssignNewInstance'
// 'Initial instance'
}
public static void AssignNewInstance(TestObj testObj)
{
testObj = new TestObj { Val = "Changed in AssignNewInstance" };
Console.WriteLine(testObj.Val);
}
}
}`
我认为您可能正在寻找的是通过引用传递值类型(bool)。你可以使用ref关键字来做到这一点。以下是相关节选:
ref关键字使参数通过引用传递,而不是通过值传递。按引用传递的效果是,对被调用方法中参数的任何更改都会反映在调用方法中。
所以,它应该改变变量,如果你改变你的代码如下(添加"ref"):
bool x = true;
string x = "";
Change_value(ref x);
if (!(x))
x = "Ok";
然后Change_value会像这样声明:
void Change_value(ref bool someBool) { //do whatever }
bool是一个原语,所以它是通过value传递的(传递给change_value的副本)。如果你想在方法中改变它的值,你可以使用布尔类,像这样:
Boolean x = true;
string x = "";
Change_value(ref x);
if (!(x))
x = "Ok";
你必须在方法参数中使用ref
前缀
void Change_value(ref Boolean x)
{
...
}
,并像这样命名:
Change_value(ref x);
你可以去MS explain: https://msdn.microsoft.com/en-us/library/14akc2c7.aspx
除非通过引用传递值X,否则X的值不应该改变。
您可以将b定义为类中的字段。一旦你这样做了,你只需要分配它,新的值将从那一刻起可用。
下面是一个简短的例子:
public static class Program
{
private static bool b;
public static void Main()
{
b = true;
Console.WriteLine(b);
DoStuff();
Console.WriteLine(b);
}
private static void DoStuff()
{
b = false;
}
}