Domanda

Ho cercato di aggiornarmi su alcune delle funzionalità più recenti in C # e una di quelle che non ho avuto occasione di usare sono tipi anonimi.

Comprendo l'utilizzo relativo alle query LINQ e ho esaminato questo post SO che ha posto una domanda simile. La maggior parte degli esempi che ho visto in rete sono correlati alle query LINQ, il che è interessante. Ho visto anche alcuni esempi in qualche modo inventati, ma non proprio nulla in cui ho visto molto valore.

Hai un nuovo uso per tipi anonimi in cui pensi che ti offra davvero qualche utilità?

È stato utile?

Soluzione

Con un po 'di riflessione, puoi trasformare un tipo anonimo in un dizionario < string, object > ;; Roy Osherove blog la sua tecnica per questo qui: http://weblogs.asp.net/rosherove/archive/2008/03/11/turn-anonymous-types-into-idictionary-of-values.aspx

Jacob Carpenter utilizza tipi anonimi per inizializzare oggetti immutabili con sintassi simile all'inizializzazione degli oggetti: http://jacobcarpenter.wordpress.com/2007/11/19/named-parameters-part-2/

I tipi anonimi possono essere utilizzati come un modo per fornire alias più facili da leggere alle proprietà degli oggetti in una raccolta che viene ripetuta con un'istruzione foreach. (Per essere onesti, questo non è altro che l'uso standard di tipi anonimi con LINQ to Objects .) Ad esempio:

Dictionary<int, string> employees = new Dictionary<int, string>
{
    { 1, "Bob" },
    { 2, "Alice" },
    { 3, "Fred" },
};

// standard iteration
foreach (var pair in employees)
    Console.WriteLine("ID: {0}, Name: {1}", pair.Key, pair.Value);

// alias Key/Value as ID/Name
foreach (var emp in employees.Select(p => new { ID = p.Key, Name = p.Value }))
    Console.WriteLine("ID: {0}, Name: {1}", emp.ID, emp.Name);

Anche se non c'è molto miglioramento in questo breve esempio, se il ciclo ID fosse più lungo, fare riferimento a Name e <=> potrebbe migliorare la leggibilità.

Altri suggerimenti

Il routing ASP.NET MVC utilizza questi oggetti ovunque.

Occasionalmente sospetto che possa essere utile eseguire qualcosa che è come una query LINQ, ma non ti capita di usare LINQ - ma vuoi comunque una proiezione di qualche tipo. Non credo che utilizzerei i tipi anonimi nella loro forma attuale per qualcosa di radicalmente diverso dalle proiezioni LINQ.

Una cosa che vorrei è vedere la possibilità di creare " chiamato " tipi con dichiarazioni semplici, che genererebbero le proprietà e il costruttore allo stesso modo dei tipi anonimi, oltre a sostituire Equals / GetHashCode / ToString nello stesso modo (utile). Quei tipi potrebbero quindi essere convertiti in & Quot; normale & Quot; tipi quando è emersa la necessità di aggiungere ulteriori comportamenti.

Ancora una volta, non penso che lo userei terribilmente spesso - ma ogni tanto l'abilità sarebbe utile, in particolare con alcuni metodi di una classe. Questo potrebbe forse essere parte di uno sforzo maggiore per fornire maggiore supporto ai tipi immutabili in C # 5.

Per aggiungere ciò che ha detto Justice, ASP.Net MVC è il primo posto che ho visto usato in modi interessanti e utili. Ecco un esempio:


Html.ActionLink("A Link", "Resolve", new { onclick = "someJavascriptFn();" })

ASP.Net MVC utilizza tipi anonimi come questo per aggiungere attributi arbitrari agli elementi HTML. Suppongo che ci siano diversi modi in cui puoi ottenere la stessa cosa, ma mi piace lo stile conciso dei tipi anonimi, dà alle cose un aspetto più dinamico del linguaggio.

L'uso più grande per i tipi anonimi è LINQ, in effetti è per questo che è stato creato.

Suppongo che una ragione per un tipo anonimo al di fuori di linq sia la creazione di un oggetto temporaneo simile a una struttura, ad esempio:

var x = new { a = 1, b = 2 };

Ciò potrebbe rendere la tua vita un po 'più semplice in alcune situazioni.

Li ho usati per creare e-mail basate su modelli in quanto sono fantastici se stai usando riflessioni e generici.

Alcune informazioni sono disponibili qui: http: //www.aaron- powell.com/blog.aspx?id=1247

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top