2010-08-14 5 views
2

J'utilise var abc = new { id = 0 }; dans mon code C# sans savoir de quel type il s'agit exactement!De quel type est "new {id = 0}" en C#?

Est-ce simplement appelé un objet? Est-ce un type particulier d'objet?

Je veux savoir coz Je ne sais pas comment ajouter des champs à ce genre d'objet

exemple rapide: Je var abc = new { id = 0 }; et je veux ajouter à abc le champ name = "david"

Répondre

9

Il s'agit d'un anonymous type, c'est-à-dire qu'il n'a pas de type que vous pouvez utiliser dans le code (bien que le compilateur en génère un).

MSDN dit:

Le nom du type est généré par le compilateur et n'est pas disponible au niveau du code source.

Si vous souhaitez ajouter une propriété, vous pouvez simplement le faire:

var abc = new { id = 0, name = "david" }; 
+0

la downvote peut expliquer pourquoi s'il vous plaît? – Oded

+0

Je ne peux que deviner, mais peut-être parce que ce n'est pas vraiment correct. Il * a * un type explicite, c'est juste que le type est créé par le compilateur et n'a pas de nom (autre qu'internet pour le compilateur). – Guffa

+0

@Guffa - peut-être ... J'ai modifié ma réponse pour être plus correct. – Oded

1

Il crée objet de classe anonyme avec un champ appelé id. Regardez msdn pour plus de détails. Une fois que vous créez l'objet , il ne peut pas être étendu.

Ce que cette classe ressemble quand il est ouvert avec .net réflecteur

[CompilerGenerated, DebuggerDisplay(@"\{ id = {id} }", Type="<Anonymous Type>")] 
internal sealed class <>f__AnonymousType0<<id>j__TPar> 
{ 
    // Fields 
    [DebuggerBrowsable(DebuggerBrowsableState.Never)] 
    private readonly <id>j__TPar <id>i__Field; 

    // Methods 
    [DebuggerHidden] 
    public <>f__AnonymousType0(<id>j__TPar id); 

    [DebuggerHidden] 
    public override bool Equals(object value); 

    [DebuggerHidden] 
    public override int GetHashCode(); 

    [DebuggerHidden] 
    public override string ToString(); 

    // Properties 
    public <id>j__TPar id { get; } 
} 

donc compilé sa classe régulière la différence fondamentale est qu'il ne peut pas être utilisé en dehors de la portée de la méthode.

Questions connexes