2017-02-01 7 views
9

C#7では、2つのパラメータを使用してエクスプレッションボディコンストラクタを作成するにはどうすればいいですか?C#7エクスプレッションボディのコンストラクタ

public Person(string name, int age) 
{ 
    Name = name; 
    Age = age; 
} 
+1

早速のご返事ありがとうございます。 – myfunnyfella

+0

このアイデアは、UserVoiceで何度も持ち上げられ、無視されています。アイデアがいくつかの牽引力を得ることができるように投票を行ってください。それは2017年です - C#は依存性注入のためのより良い省略形を持つべきです!この例題を動作させるには、このパッケージ 'Systemをインストールする必要があります。https://visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/17225666-automatic-constructor-parameter-setters – pbarranis

答えて

12

基本的にはありません。式ボディメンバーは、実行するステートメントが1つの場合にのみ使用できます。この場合は2つあります。

私が意味する、あなたが使用タプルをできたが、私は強く、それに対して助言する:あなたは今、一つだけの文(tuple = (name, age);)を持っているので、作品

// DO NOT USE THIS CODE - IT'S JUST TO DEMONSTRATE THE FEASIBILITY 
public class Person 
{ 
    private readonly (string name, int age) tuple; 

    public string Name => tuple.name; 
    public int Age => tuple.age; 

    public Person(string name, int age) => tuple = (name, age); 
} 

を。しかし、式のボディーなコンストラクターを使用できるように、フィールドを変更しないでください。

+2

ValueTuple': 'install-package System.ValueTuple' –

24

を - (。それは少しより快適にこれ以上だが、それはまだIMOやる価値はありませんダビデがあなたも、直接読み取り専用自動小道具にそれを解体後、タプルを構築することができ、示されたように)

これを行う方法は、一つの式に複数の割り当てを許可するタプルと解体を使用することです:

C#7.1のよう
public class Person 
{ 
    public string Name { get; } 
    public int Age { get; } 

    public Person(string name, int age) => (Name, Age) = (name, age); 
} 

(Visual Studioの2017年アップデート3で導入された)、コンパイラのコードは今すぐ最適化しますタプルの実際の構築と分解。したがって、このアプローチは、 "長さ"の割り当てと比較してパフォーマンスオーバーヘッドはありません。

+7

ニースは、そのような解体を考えなかった... –

+1

これは悪です。私はC#7.1を使用しており、私はこれを見分けることはできません。 –

+0

@PanagiotisKanavos、どのように悪いですか? C#7.1のように、私はこれを使い始めました。 –

関連する問題