2017-12-09 8 views
-2

私は読み取り専用REF REF as describedを返すメソッドを書きたい:「機能は、メンバーが変異のためにそれらをさらすことなく参照で変数を返すことができます。」C#7.2でreadonlynessをreadonlynessに適用するにはどうすればよいですか?

残念ながら、私のコードは、このような変異をコンパイルし、実行します。それを変更できないようにするにはどうすればよいですか?それは良い理由のために読んだだけです。コンパイラエラーが予想されます。さらに私は何かをしなければならないのでしょうか? 200は201に変更されています。私はそれを望んでいません。

internal class TryClass 
{ 
    private static int _result = 0; 

    public static ref readonly int Multiply(int a, int b) 
    { 
     _result = a * b; 
     return ref _result; 
    } 
} 

internal class Program 
{ 
    private static void Main(string[] args) 
    { 
     int x = 10; 
     int y = 20; 
     var rez = TryClass.Multiply(x, y); 
     rez++; 
     Console.WriteLine(rez); 
     Console.ReadLine(); 
    } 
} 
+1

@MethodMan C#7.2の新しい 'ref readonly'構文を完全には読まなかったと思います。 –

+2

' TryClass.Multiply'の前に 'ref'キーワードを忘れました(そして' var rez'の前に対応する 'ref readonly')そのため、読み取り専用の参照ではなく、コピーを返すようにします:https://docs.microsoft.com/en-us/dotnet/csharp/reference-semantics-with-value-types#ref-readonly-returns – UnholySheep

答えて

2

コメントに基づいています。これが解決策です。 "重大度​​コード説明プロジェクトファイルの行の抑制状態 エラーCS8329読み取り専用の変数であるため、 'TryClass.Multiply(int、int)'メソッドをrefまたはout値として使用できません"

internal class Program 
{ 
    private static void Main(string[] args) 
    { 
     int x = 10; 
     int y = 20; 
     ref readonly var rez = ref TryClass.Multiply(x, y); 
     rez++; 
     Console.WriteLine(rez); 
     TryClass.DoAfter(); 
     Console.ReadLine(); 
    } 
} 
+1

'ref var rez'は 'ref readonly var rez'(これは異なるコンパイルエラーにつながるはずです) – UnholySheep

+0

何をするには?私の読書は強制されます。 "rez ++"はコンパイラエラーを引き起こします。 – Daan

+1

このコードサンプルで 'rez ++'をコメントアウトしてみましたか?それでもコンパイルエラーにつながるはずです – UnholySheep

関連する問題