方法调用的.net变量值可能改变吗?

时间:2015-07-30 14:31:01

标签: c# asp.net-mvc-5

向大家致意 我想知道我是否有bool x = true;并且我之后调用一个方法可能会改变x值。如果方法无效,这种变化是否适用不要返回结果。
示例:

bool x = true;
string x = "";
Change_value(x);

if (!(x))
   x = "Ok";

当我调用我的方法时x值会发生变化,或者我需要将其作为x = change_value(x)

进行更改

6 个答案:

答案 0 :(得分:1)

这取决于您传递给方法的变量的类型。在你的例子中。

值类型不会看到调用范围中反映的更改,其中属性引用值。

This answer explains the concept well

请注意,您可以使用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);
        }
    }
}`

答案 1 :(得分:1)

我认为您可能正在寻找的是通过引用传递值类型(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 }

答案 2 :(得分:0)

您必须在方法参数

中使用ref前缀
void Change_value(ref Boolean x)
{
...
}

并将其称为:

Change_value(ref x);

你可以去MS解释:https://msdn.microsoft.com/en-us/library/14akc2c7.aspx

答案 3 :(得分:0)

bool是一个原语,因此它按值传递(传递给change_value的副本)。 如果要在方法中更改它的值,可以使用布尔类,如:

Boolean x = true;
string x = "";
Change_value(ref x);

if (!(x))
x = "Ok";

答案 4 :(得分:0)

除非你通过引用传递值X,否则x的值不应该改变。

答案 5 :(得分:0)

您可以将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;
    }
}

这样您就可以从班级内的任何地方访问和修改b。