2017-08-25 26 views
-2

为什么vowels在调用我的方法后不为null?字符串[]是一个引用类型,我不明白?在方法中将参考类型设置为null

using System; 

class Program 
{ 
    public static string[] vowels = {"A", "E", "I", "O", "U"}; 

    public static void SetArrayToNull(string[] array) 
    { 
    array = null; 
    } 

    public static void Main(string[] args) 
    { 
    SetArrayToNull(vowels); 
    Console.WriteLine(vowels == null); //writes "false" 
    } 
} 
+0

你不设置'vowels'到'null',但'array',这是只有一个参数 - 在SetArrayToNull的'本地范围内的变量() ',不是对_variable_传递的引用。 –

+0

因为这是对象的引用而不是对象。 – z3nth10n

+0

引用类型/值类型与传递引用/传递值不同。很多人会让他们感到困惑。 –

回答

-2

您应该使用ref关键字。

正如你可以在这里看到:https://docs.microsoft.com/en-en/dotnet/csharp/language-reference/keywords/ref

因为,你的主要问题是,你作为参数传递的变量在SetArrayToNull方法的局部范围仅仅修改。

但是,通过使用ref关键字,您将避免这种情况。因为您在此方法的本地范围内所做的更改将在您呼叫之外进行更新。

像这样简单:

using System; 

class Program 
{ 
    public static string[] vowels = {"A", "E", "I", "O", "U"}; 

    public static void SetArrayToNull(string[] array) 
    { 
    array = null; 
    } 

    public static void Main(string[] args) 
    { 
    SetArrayToNull(ref vowels); 
    Console.WriteLine(vowels == null); //now, it will writes "true" :) 
    } 
} 
相关问题