2010-10-26 4 views
0

J'avais besoin de passer un IGrouping sur un index typé anonymement à une fonction.Passage d'un groupe typé anonyme à une fonction

List<DataClass> sampleList = new List<DataClass>(); 
var groups = sampleList.GroupBy(item => new { item.A, item.B, item.C }); 

J'avais besoin de traiter chacun des groupes avec une fonction. J'ai donc écrit ceci qui fonctionne.

static void ProcessGroup<T>(IGrouping<T, DataClass> group) 
     { 
     //consume group 

     } 

Maintenant je dois savoir pourquoi cela fonctionne et est-ce la bonne façon de faire passer autour de ce genre de données. Je viens de l'écrire sur une idée que ce pourrait fonctionner.

+0

Pourquoi cela ne fonctionnerait-il pas? – SLaks

+0

@SLaks, parce qu'un type anonyme est introduit et que le compilateur pourrait l'interdire à l'extérieur du bloc dans lequel il est défini. –

+0

Eric vous donnera probablement une meilleure réponse mais je pense que vous avez raison, si l'inférence de type n'était pas disponible, Que remplaceriez-vous 'var' par? Vous auriez probablement besoin de créer un type fort avec A, B, C et item => new StrongType (item.A, item.B, item.C) –

Répondre

3

J'ai besoin de savoir pourquoi cela fonctionne

Il fonctionne parce que c'est un programme juridique C# tel que décrit par la spécification C#. Plus précisément, la section 7.5.2 de la spécification C# 4.

Est-ce la bonne façon de faire circuler ce type de données?

Ça me semble bien.

+0

Merci. Je me demandais pourquoi cela fonctionnait parce que je ne connaissais pas l'inférence de type. Une telle chose serait-elle possible sans inférence de type? – Midhat

+0

@Midhat: Vous ne pouvez pas indiquer le nom d'un type anonyme, car il n'a pas de nom. Par conséquent, partout où un type anonyme est utilisé, le type doit être déduit du type de l'expression. –

Questions connexes