2

だから、あなたが持っているとしましょう:

public void TestFishsticks()
{ 
   var fishes = GetFishstick(false);
}

private object GetFishstick(bool getBigFishes)
{
  return FishsticksManager().GetFishsticks(getBigFishes);
}

public void TestFishsticks()
{ 
   var fishes = GetFishstick(getBigFishes: false);
}

private object GetFishstick(bool getBigFishes)
{
  return FishsticksManager().GetFishsticks(getBigFishes);
}

これには何か理由がありますか?

私の現在の会社のコードベースでは、両方を行っているようですが、どちらか一方を優先する理由はないようです。2 番目の選択肢を使用すると、パラメーター名をすぐに確認できるため、読みやすさがわずかに向上する可能性がありますが、インテリセンス経由で確認できますか?

4

5 に答える 5

7

名前付き引数は、読みやすさを向上させるために、主に C# 4.0 で導入されました。実際にそれらを使用する必要はありません。場合によってはそれらを使用することを好む人もいれば、好まない人もいます。それは基本的にあなた次第です。

特に、コードを常に読むとき (さらに悪いことに、印刷物を確認するとき) に intellisense をトリガーしたくない場合は、読みやすさが大幅に向上します。次の 2 つを比較してください。

CalculateBMI(123, 178); // What do the numbers mean?
CalculateBMI(weightInKg: 123, heightInCentimeters: 178); // Clearer IMHO.

ただし、名前付き引数と省略可能なパラメーターを一緒に使用すると、省略可能なパラメーターのリストからいくつかのパラメーターのみに引数を指定できます。たとえば、この機能により、COM インターフェイスへの呼び出しが大幅に容易になります。

于 2011-10-14T12:28:25.100 に答える
4

どちらかが優先される理由はないようです

名前付き引数を使用する正当な理由:

false特に引数がornullまたは0orなどの場合、コードは一目で理解しやすくなります""

名前付き引数は、オプションの引数とうまく機能します。ダースの引数を取るメソッドは、それらのいくつかを指定するだけでよい場合、単純化された呼び出しサイトを持つことができます。

コードは、開発の初期段階でリファクタリングの順序を変更しても堅牢です。顧客にリリースする前に重大な変更を行う場合、以下を変更します。

void M(int width, int height)

void M(int height, int width)

次に、言ったすべてのコード

M(height: 123, width: 456);

それでも正しいでしょうが、言ったコード

M(123, 456);

更新する必要があります。

同様に、これにより、長方形を指定するこのメソッドを変更しても、コードが堅牢になります。

M(int top, int bottom, int left, int right)

このメソッドに:

M(int top, int height, int left, int width)

明らかな重大な変更。コード

M(top: 10, bottom: 20, left: 30, width: 40)

メソッドを変更するとエラーになります。このコードはそうではなく、動作を変更します。

M(10, 20, 30, 40);
于 2011-10-14T15:21:13.363 に答える
2

はい、それは主に読みやすさの問題です。オプションのパラメータのリストが長い場合にも便利です。

public bool GetFishstick(int x = 1, int y = 2, int z = 3)
{
...
}

// Called as such: The other optional parameters (x,y) are supplied automatically.
var fish = GetFishstick(z: 10);

// Compare to the alternative where you have to provide them.
var fish = GetFishstick(1,2,10);

インテリセンスが常に利用できるとは限らないことにも注意してください。たとえば、WinMergeなどのdiffビューア、または場合によってはメモ帳でコードを読み取ります。インテリセンスが使用されていない場合でも、名前付きパラメーターを使用することで、読みやすさは維持されます。

于 2011-10-14T12:33:38.200 に答える
1

ここで使用しているのは、名前付き引数です。

読みやすさを大幅に向上させることができます。特にブーリアンの場合。

検討:

var date = GetDate(2011, 2, 3);  // 'feb 3' or '2nd of march' ? 

代わりにあなたが読むなら

var date = GetDate(year:2011, month:2, day:3); 

あなたはもっとたくさん知っています。とても混乱を避けることができます。おまけとして、好きなように呼び出すことができます。

var date = GetDate(month:2, day:3, year:2011);  // same date.

名前付き引数は、C#4 以降のフォームでのみ使用できます。

于 2011-10-14T12:29:36.460 に答える
1

名前付き引数は、呼び出されたメソッドのパラメーター リスト内のパラメーターの順序を覚えたり調べたりするのを防ぐのに役立ちます。各引数のパラメータは、パラメータ名で指定できます。パラメーターが 1 つしかないので (個人的には) 意味がありません。複数ある場合は、順序または読みやすさを変更すると役立ちます (メソッド インテリセンスを気にしない場合)。

于 2011-10-14T12:32:37.540 に答える