2016-02-18 35 views
5

Con i membri espressione di corpo C# 6 di, posso scrivere:In che modo i membri con espressione fisica distinguono tra vuoto e non vuoto?

public string FullName => $"{_firstName} {_lastName}";

e posso scrivere:

static void Print(string message) => Console.WriteLine(message);

Nel primo caso, l'espressione restituisce qualcosa. Nel secondo, non è così.

Cosa sta succedendo qui per determinare come "agire" senza la necessità di alcuna ulteriore sintassi? O è semplicemente un caso di guardare la firma del metodo durante la compilazione?

Non sono un grande fan di lasciare le cose a "solo lavoro" senza sapere cosa sta succedendo.

+1

Penso che '$" ... "' sia solo una versione breve di 'String.Format (...)' che restituisce senza dubbio una 'stringa'. – HimBromBeere

+1

È, è un'altra caratteristica C# 6 chiamata interpolazione di stringa. Forse ho confuso le acque usando questo come frammento di prova. La mia domanda riguarda più in che modo la sintassi delle espressioni decide cosa restituire e quando. –

+0

Nel tuo secondo esempio il tipo di ritorno è 'void', non è vero? Non ci sono ulteriori decisioni sui compilatori su questo. Non vedo il tuo problema – HimBromBeere

risposta

3

In primo luogo, FullName è una proprietà. È sempre restituisce un valore. Quindi, la firma del corpo deve essere Func<T>, dove T è il tipo restituito (che è definito come string nell'esempio) o il delegato equivalente.

La firma del metodo void Print(string message) è Action<string>, poiché il compilatore comprende che un void non restituisce un valore e accetta un singolo parametro. Comprende alcune istruzioni restituire un valore (come => "a") e alcuni possono stare da soli (anche se potrebbero restituire un valore come => new object()). Quindi può dirti se si incasina: "CS0201: solo l'assegnazione, la chiamata, l'incremento, il decremento e le nuove espressioni oggetto possono essere utilizzate come una dichiarazione".