2013-01-21 18 views
17

In VB.NET io sono abituato a fare le cose in questo modo durante la creazione di tipi anonimi (VB.NET anonymous types include the notion of Key Fields):Come si dichiarano i campi "Chiave" nei tipi anonimi C#?

Dim prod1 = New With { 
    Key .Name = "paperclips", 
    Key .Price = 1.29, 
    .OnHand = 423 
} 

Tuttavia, non sono stato in grado di trovare un modo di fare questo in C#, dal momento che sembra che la parola chiave Key non sia supportata.

C'è un modo per indicare in C# che voglio solo confrontare alcuni dei campi in tipo anonimo quando si cerca l'uguaglianza?

+3

Sono sempre stupito dalle piccole differenze tra C# e VB. Certamente non sapevo che potessi fare questo è VB. – svick

risposta

17

Non c'è niente del genere in C#. In C#, tutte le proprietà dei tipi anonimi sono di sola lettura e partecipano ai confronti di uguaglianza.

Se si desidera fare qualcosa di simile in C#, sarà necessario creare il proprio tipo (denominato).

+3

Per espandere un po ': MSDN dice che le implementazioni 'Equals' e' GetHashCode' generate automaticamente generano tutte le proprietà del tipo anonimo. Usano ogni tipo di proprietà per chiamare le loro implementazioni di 'Equals' e' GetHashCode'. –

+1

È un peccato che una funzione così utile non esista in C#. Probabilmente non vale molto, ma ho creato un [suggerimento] (http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/3572724-c-feature-request-key-fields-in-anonymous- digitare) nei forum di uservoice per una richiesta di funzionalità. – Daniel

+1

Ciò significa che, in pratica, ogni proprietà di un tipo anonimo in C# è uguale a una proprietà VB.NET Key? – TheEvilPenguin

3

Non c'è chiave equivalente in C#.