7

Perl には次の機能があります。

my ($a,$b,$c,$d) = foo(); 

wherefooは、一度に 1 つずつ割り当てるのではなく、4 つの変数を返します。C#に似たようなものはありますか?

4

3 に答える 3

2

Tupleは、これに役立つ構成要素になる可能性があります。

public Tuple<int, string, double> Foo() { ... }

次に、次のことができます。

var result = Foo();

int a = result.Item1;
string b = result.Item2;
double c = result.Item3;

これは、C# に対する関数型プログラミング スタイルの影響が増大したことの遺産です。タプルは、多くの関数型言語の基本的な構成要素であり、静的型付けを大幅に支援します。

于 2013-07-29T13:27:53.890 に答える
1

関数の場合、1 つのオブジェクトまたは のいずれかを返す必要がありますvoid。しかし、この問題にはいくつかの方法でアプローチできます。

  1. structaまたは aなどのデータ構造を作成して、関数としてclassそれを含みa,b,c,d、返すことができます。たとえばdata foo()、データには a、b、c、d が含まれます。
  2. foo(out a, out b, out c, out d) のように、関数のパラメーターでキーワードを使用できますoutが、変数入力を初期化する必要があります。詳細はこちら。http://msdn.microsoft.com/en-us/library/t3c3bfhx(v=vs.80).aspxを参照してください。
  3. refout と同じように which を使用することもできます。http://msdn.microsoft.com/en-US/library/14akc2c7(v=vs.80).aspxを参照してください。
  4. または、a、b、c、d がすべて同じ型である場合は、別のメンバーが指摘したように、arrrayまたは aとしてコレクションの形式でそれらを返すことができますlist

また、 strcut を渡すタイプと、値を渡すオブジェクトのタイプに応じて、Valueまたはとして渡されることも覚えておいてくださいReferencehttp://msdn.microsoft.com/en-us/library/0f66670z(v=vs.71).aspxを参照してください。

于 2013-07-29T13:12:13.287 に答える