2009-10-15 6 views
4

S'il vous plaît considérer le code suivant:Utilisation appropriée du mot-clé « nouvelle » dans LINQ

string[] words = 
{ "Too", "much", "of", "anything", "is" ,"good","for","nothing"}; 

var groups =from word in words 
      orderby word ascending 
      group word by word.Length into lengthGroups 
      orderby lengthGroups.Key descending 
      select new {Length=lengthGroups.Key, Words=lengthGroups}; 

    foreach (var group in groups) 
    { 
    Console.WriteLine("Words of length " + group.Length); 
    foreach (string word in group.Words) 
    Console.WriteLine(" " + word); 
    } 

Pourquoi avons-nous besoin le mot-clé « nouveau » ici .Peut vous donner un autre exemple simple de comprendre correctement?

Répondre

4

Le mot clé new est utilisé pour créer une instance d'une classe.

Dans ce cas, il s'agit d'une classe anonyme. Vous pouvez utiliser la même syntaxe pour créer un objet anonmyous en dehors du cadre d'une requête LINQ:

object o = new { Name = "Göran" }; 
+3

Note de côté: 'new' initialise également les structures –

+0

Merci Guffa pour votre explication. Cela m'a beaucoup aidé. :) Bonne journée? – user190560

10

La syntaxe new { A = "foo", B = "bar } définit un type anonyme avec les propriétés A et B, avec les valeurs "foo" et "bar" respectivement. Vous faites cela pour retourner plusieurs valeurs par ligne.

Sans certains sorte de nouvel objet, vous pouvez seulement retourner (par exemple) le Key. Pour renvoyer plusieurs propriétés, une valeur est requise. Dans ce cas, un type anonyme est correct car ces données sont uniquement utilisées localement pour cette requête.

Vous pouvez également définir votre propre class, et utilisez new avec cette place:

new MyType("abc", "def") // via the constructor 

ou

new MyType { A = "abc", B = "def" } // via object initializer 

Byt qui est surpuissant, à moins MyType a un sens utile en dehors de ce contexte.

+2

Même si vous ne vouliez que l'une des propriétés (disons Key), vous pouvez toujours vouloir utiliser un type anonyme afin de donner un nom plus significatif à la propriété. Cet aspect est probablement mieux vu lors de la sélection d'un sous-ensemble de propriétés d'un objet existant dans une énumération LINQ. – tvanfosson

0

Cette syntaxe crée une instance d'un type anonyme avec des propriétés Length et Words pour chaque élément dans l'énumération lengthGroups. Demandez-vous (a) pourquoi la syntaxe lit comme le fait, ou (b) pourquoi le code crée-t-il un type anonyme?

0

Le nouveau mot-clé crée un type anonyme dans votre requête. Les types anonymes dans Linq vous permettent de modeler les résultats de vos requêtes.

+0

Simplifie plutôt que permet ... Vous pouvez faire la même chose avec une classe nommée. – Guffa

Questions connexes