C# クラスにメソッドがあるとし_Abc(int a, int b)
ます。通常は 2 つのパラメーターを取ります。
_Abc(int a, int b)
メソッドから戻り値として4 つの int 値を取得することは可能ですか?
C# クラスにメソッドがあるとし_Abc(int a, int b)
ます。通常は 2 つのパラメーターを取ります。
_Abc(int a, int b)
メソッドから戻り値として4 つの int 値を取得することは可能ですか?
を返すことができますTuple<int, int, int, int>
。ただし、パブリック API の一部としてタプルを返すことはあまり有益ではないため、その場合は、値に名前を付けることができるように、戻り値を保持するクラスを作成します。
これまでの答え (タプルを返す、コレクションを返す、カスタム クラス/構造体を返す、またはパラメーターを使用する) は合理的な答えですが、より良い答えは、最初からそれをしないことです。4 つのものを返すメソッドは、おそらく設計が不適切なメソッドです。
たとえば、それぞれが 1 つのものを返す 4 つの異なるメソッド (またはプロパティ) を持つように型を再設計できますか? 使用するより良いパターンがあるかもしれません。あなたのシナリオをもっと詳しく説明できますか?
最も柔軟で拡張可能なアプローチであるカスタム型を返すことができます。
public static Foo GetFoo(int a, int b)
{
Foo foo = new Foo();
foo.A = 1;
foo.B = 2;
foo.C = 3;
foo.D = 4;
return foo;
}
これが疑似クラスです
public class Foo
{
public int A{ get; set; }
public int B{ get; set; }
public int C{ get; set; }
public int D{ get; set; }
}
別の方法 (.NET 4 を使用) は、Tuple
public static Tuple<int,int,int,int> GetFoo(int a, int b)
{
return Tuple.Create(1,2,3,4);
}
この方法でプロパティを読み取るため、クラスアプローチほど読みにくい:
var values = GetFoo(1, 2);
int A = values.Item1;
int B = values.Item2;
int C = values.Item3;
int D = values.Item4;
したがって、タプルはある程度匿名です。
1 つまたは 2 つの追加パラメーターを返したい場合out
は、メソッドのようにパラメーターを使用することもできTryParse
ます。
DateTime dt;
String str = "01.01.2013";
if(DateTime.TryParse(str, out dt))
{
// so this method returns two variables:
// a bool as return value and a DateTime as out parameter
Console.WriteLine("Year: " + dt.Year);
}
リーの答えに加えて、いくつかのref
またはout
パラメーターを追加できます。つまり、次のようになります。
_Abc(int a, int b, out int c, out int d, out int e, out int f)
パラメータなしでこのような関数を作成することもできます。
public void _Abc(int a, int b, out res1, out res2, out res3, out res4)
{
res1 = 1;
res2 = 2;
res3 = 3;
res4 = 4;
}
メソッドを変更できる場合は、out パラメータを使用できます。http://msdn.microsoft.com/en-us/library/t3c3bfhx(v=vs.80).aspx
_Abc(int a, int b, out int c, out int d, out int e, out int f){
c=1;
d=2;
e=3;
f=4;
}
簡単な答えが必要だと思いますよね?
この単純なコードを理解してみてください(コピーして貼り付けるだけです)。
class Class1
{
private List<int> _Abc(int a, int b)
{
// do job
int x = 128, y = 256, z = 512;
List<int> returns = new List<int>();
returns.Add(x);
returns.Add(y);
returns.Add(z);
return returns;
}
public void anotherMethod()
{
List<int> simple = new List<int>();
simple = _Abc(55, 56);
int[] _simple = simple.ToArray();
for (int i = 0; i < simple.Count; i++)
{
Console.WriteLine("" + _simple[i]);
}
//Console.ReadKey();
}
}
それらをout パラメータとして返すことができます
4 つのまったく異なるものを返す場合は、新しい型を作成するのが最善です。たとえば、新しく作成された形状の高さ、幅、上部、および下部の値を返す場合は、適切な変数名を持つこれらの値をすべて保持するクラスを作成する必要があります。
同じ種類のものを 4 つ持っている場合は、それらすべてを何らかのコレクションに入れるのが理にかなっています。たとえば、4 つの数値が 4 つの異なる形状の面積を表している場合は、 aList<int>
またはを返すのが理にかなっていint[]
ます。