Pytanie Zadeklarowanie anonimowego członka typu o prostej nazwie


Podczas próby skompilowania tego:

var car = new { "toyota", 5000 };

Otrzymasz błąd kompilatora "Nieprawidłowy anonimowy deklarator typu typu Członkowie anonimowi muszą być zadeklarowani z przydziałem członków, prostymi nazwiskami lub dostępem członków." ponieważ kompilator nie jest w stanie wywnioskować nazwy właściwości z odpowiednich wyrażeń. To ma sens.

Ciekaw jestem, że komunikat o błędzie sugeruje trzy ważne sposoby zadeklarowania elementu typu. Przydział członków i dostęp do członków są oczywiste:

// member assignment
var v = new { Amount = 108, Message = "Hello" };

// member access
var productQuery = 
    from prod in products
    select new { prod.Color, prod.Price };

Jaki byłby przykład deklarowania za pomocą prosta nazwa?

Googling i powiązane pytania dotyczące SO dają przykłady przypisanie członka i dostęp do członka tylko.


12
2017-10-27 15:25


pochodzenie




Odpowiedzi:


O ile mi wiadomo, simple name deklaracja jest następująca:

var amount = 10;
var whatever = "hello";

var newType = { amount, whatever }

Który automatycznie stworzy anonimowy typ równy:

var newType = { amount = amount, whatever = whatever }

13
2017-10-27 15:30



W rzeczywistości nazwa prosta to określony termin z C # spec. Zacytować: A simple-name consists of an identifier, optionally followed by a type argument list: simple-name: identifier type-argument-listopt  strona 158, akapit 7.6.2 od specyfikacji C # 5.0 MSDN i specyfikacja językowa są nieco zsynchronizowane. Specyfikacja daje głębszą definicję - Ilya Ivanov