20

2 つの位置を計算する関数があり、両方を取得したいのですが、それらを配列に変換せずに、同じ関数から返される 2 つの値を取得する方法はありますか。私はアウト引数またはそのようなもので何かを考える... tnx. ここに私のコード:

public static int Location(int p_1, int p_2, int p_3, int p_4)
{
  int  XLocation = p_2 - p_1;
  int YLocation = p_4-p_3;
  return XLocation,YLocation;
}

public void Print()
{
}
4

10 に答える 10

33

それには複数の方法があります。

1) 使用:

public KeyValuePair<int, int> Location(int p_1, int p_2, int p_3, int p_4)
{                 
    return new KeyValuePair<int,int>(p_2 - p_1, p_4-p_3);
}

また

static Tuple<int, int> Location(int p_1, int p_2, int p_3, int p_4)
{
    return new Tuple<int, int>(p_2 - p_1, p_4-p_3);
}

2)次のようなカスタムクラスを使用しますPoint

public class Point
{
    public int XLocation { get; set; }
    public int YLocation { get; set; }
}

public static Point Location(int p_1, int p_2, int p_3, int p_4) 
{    
     return new Point 
     {
        XLocation  = p_2 - p_1;
        YLocation = p_4 - p_3;
     }      
 }

3)outキーワードを使用:

   public static int Location(int p_1, int p_2, int p_3, int p_4, out int XLocation, out int YLocation)
   {
        XLocation = p_2 - p_1;    
        YLocation = p_4 - p_3;
   }

これらのメソッドの比較は次のとおりです: multiple-return-values

最速の方法 (最高のパフォーマンス) は次のとおりです。

public KeyValuePair<int, int> Location(int p_1, int p_2, int p_3, int p_4)
{                 
    return new KeyValuePair<int,int>(p_2 - p_1, p_4-p_3);
}
于 2013-01-24T08:03:31.793 に答える
13

構造体またはクラスを使用します。

public struct Coordinates
{
    public readonly int x;
    public readonly int y;

    public Coordinates (int _x, int _y) 
    {
        x = _x;
        y = _y;
    }
}

public static Coordinates Location(int p_1, int p_2, int p_3, int p_4) 
{
    return new Coordinates(p_2 - p_1, p_4 - p_3);
}

outキーワードを使用するよりもきれいだと思います。

于 2013-01-24T07:54:12.507 に答える
6

この方法で 2 つの値を返すことはできません。ただし、次のように、変数を out 変数として渡すことができます。

  public static void Location(int p_1, int p_2, int p_3, int p_4, out int XLocation, out int YLocation)
{
    XLocation = p_2 - p_1;

    YLocation = p_4-p_3;
}

次に、宛先変数をメソッドに渡すだけです。

int Xlocation, YLocation;
Location(int p_1, int p_2, int p_3, int p_4, out int XLocation, out int YLocation);

そして、計算された値でそれらを埋めます。

于 2013-01-24T07:52:40.160 に答える
3

演算子 'return' で 2 つの値を返すことはできません。'struct' で次のコードを使用できます。

public static Position Location(int p_1, int p_2, int p_3, int p_4)
{

Position location;
location.xLocation = p_2 - p_1;
location.yLocation =p_4-p_3;;

return location;
}

public struct Position
{
public int xLocation;
public int yLocation;
}
于 2013-01-24T07:59:19.737 に答える
2

out、Coordinate 構造体、または Tuple を使用できます。

タプルの場合:

public Tuple<int, int> GetLocation()
{
     return new Tuple<int,int>(1,2);
}
于 2013-01-24T08:00:17.900 に答える
2

Windows フォームを使用している場合は、Pointstruct;を使用できます。

public static Point Location(Point p1, Point p2)
{
    return new Point(p2.X - p1.X, p2.Y - p1.Y);
}   
于 2013-01-24T08:01:25.647 に答える
1

aTuple<T1, T2>または out パラメータを使用できます。

于 2013-01-24T17:53:25.470 に答える
1

メソッドがパブリック コントラクトの一部ではない場合、タプルを使用することをお勧めします。

private Tuple<int, string> Foo()
{
  // ...
}
于 2013-01-24T07:59:36.050 に答える
0

配列リストを使用

public ArrayList Location(int p_1, int p_2, int p_3, int p_4)
{
 ArrayList ar = new ArrayList();
 ar.AddRange(new string[] { "", "" });  
 int  XLocation = p_2 - p_1;
 int YLocation = p_4-p_3;
 ar[0] = XLocation.ToString(); 
 ar[1] = YLocation.ToString(); 
 return ar;
 }
于 2013-01-24T08:37:08.603 に答える