2017-08-25 10 views
-2

vowelsが私のメソッドを呼び出した後にnullではないのはなぜですか? string []は参照型ですが、わかりません。メソッド内で参照型を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

- (SetArrayToNull'のローカルスコープ内の変数) '、_variable_への参照ではありません。 –

+0

これは、オブジェクトではなくオブジェクトの参照です。 – z3nth10n

+0

参照型/値型は、参照渡し/渡し渡しとは異なる概念です。多くの人が混乱してしまいます。 –

答えて

-2

refキーワードを使用してください。

あなたがここに見ることができるように:、あなたの主な問題は、あなたがパラメータとして渡された変数のみSetArrayToNullメソッドのローカルスコープに変更されていることであるhttps://docs.microsoft.com/en-en/dotnet/csharp/language-reference/keywords/ref

ので。

ただし、refキーワードを使用すると、これは避けられます。このメソッドのローカルスコープで行った変更は、呼び出しの外で更新されるためです。

このような単純な:あなたは `null`なので`へvowels`を設定しますが、唯一のパラメータである `array`、しません

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" :) 
    } 
} 
関連する問題