11

私はC#が初めてです。C#でパラメーターを指定せずにこれを試しました

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class First
{
    public void fun(out int m)
    {
        m *= 10;
        Console.WriteLine("value of m = " + m);
    }
}

class Program
{
    static void Main(string[] args)
    {
        First f = new First();
        int x = 30;
        f.fun(out x);
    }
}

しかし、「割り当てられていない出力パラメーター 'm' の使用」や、制御が現在のメソッドを離れる前に、出力パラメーター 'm' を割り当てる必要があるなどのエラーが発生します。

したがって、これらのエラーの意味と、 xに値が既に割り当てられているときに ' m 'を割り当てる必要がある理由は何ですか。

4

5 に答える 5

2

C# 7.0 以降、変数が out 引数として渡された時点で変数を宣言する機能が導入されました。

前:

public void PrintCoordinates(Point p)
{
    int x, y; // have to "predeclare"
    p.GetCoordinates(out x, out y);
    WriteLine($"({x}, {y})");
}

C# 7.0

public void PrintCoordinates(Point p)
{
    p.GetCoordinates(out int x, out int y);
    WriteLine($"({x}, {y})");
}

var キーワードを使用することもできます。

p.GetCoordinates(out var x, out var y);

out パラメータの範囲に注意してください。たとえば、次のコードでは、「i」はif-statement内でのみ使用されます。

public void PrintStars(string s)
{
    if (int.TryParse(s, out var i)) { WriteLine(new string('*', i)); }
    else { WriteLine("Cloudy - no stars tonight!"); }
}

詳細については、こちらをご覧ください。このリンクはout parameterだけでなく、 c# 7.0で導入されたすべての新機能に関するものです。

于 2016-08-27T15:04:04.647 に答える
1
public void Ref_Test(ref int x)
{
    var y = x; // ok
    x = 10;
}

// x is treated as an unitialized variable
public void Out_Test(out int x)
{
    var y = x; // not ok (will not compile)
}

public void Out_Test2(out int x)
{
    x = 10;
    var y = x; // ok because x is initialized in the line above
}
于 2013-09-28T14:21:18.240 に答える